获取3D中两个矩形之间的相交线

时间:2019-01-02 20:40:09

标签: c# math 3d intersection rectangles

我试图找到一种方法来获取两个矩形之间的交点的线(3D空间中的两个点)。

我遇到了一个问题:Intersection between two rectangles in 3D

但这不是我的问题。在这个问题中,当我在寻找矩形的整体时(考虑相框与图片本身),矩形仅被视为边界(周长)。

我已经发现,在每种情况下,都会有一个相交线(两个点),或者根本没有相交线。如果相交只是在边界上,那么只是一个点,在我的情况下,可以将其视为没有相交。

我的情况是这些矩形之一代表“静态”表面,该表面不能移动或更改。另一个代表“动态”表面,我必须对其进行调整以避免交叉

示例:

enter image description here

一旦获得了3D空间中的点p1和p2,我的目标就是将动态矩形修改为3d多边形,该多边形将不再与静态矩形交叉,如下所示:

enter image description here

因此,您可以了解为什么“边缘交叉点”与我的情况无关。我正在将“真实的”相交变成边缘相交,因此任何边缘相交都不需要我做任何事情。

我只是在寻找一个公式,从两组四个点(矩形)开始,这将给我两个相交线的两个点,或者告诉我没有(相关的)相交。

我在此网站上找到的每个公式或其他公式都不符合我的需要,或者不让我输入任意矩形(例如,我无法解决使用平面或一个矩形,仅需4行)

我当然正在尝试使用C#对其进行编码,因此任何代码答案都将为您带来很大的帮助,但是我相信,即使是仅数学答案也足以满足我从中生成代码的需要,因此我将接受仅由伪代码或简单的数学公式组成的答案,只要它们足够简单或足够好地解释以使我了解正在发生的事情。

1 个答案:

答案 0 :(得分:1)

如果您只使用算法而不是完整代码,则这里是一个草图:

  1. 从矩形中构建2个平面(任何3个点都将与this answer中的位置相同)
  2. this answer中那样找到这两个平面的交线I或发现这些平面是平行的,所以没有交点
  3. 找到I线与包含矩形所有边的线的交点,如this answer
  4. 检查在上一步中找到的一些点是否在矩形(线段)的相应边内。此步骤可能可以与上一步合并,但是为了简单起见,我将其分开放置。现在,您可能有0、1或2个线段,它们代表I线与两个矩形的交点(请注意,此处的点被视为两端相同的线段的边沿情况)。如果您没有2个线段,则矩形将没有交点。
  5. 假设在上一步中,您在I行上找到了2个线段(每个矩形中的一个),则只需要找到它们的交点即可,这将是您的答案(同样,空白表示没有交点)。 / li>