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

Get Intersection line between two rectangles in 3D

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

我运行进入这个问题:Intersection between two rectangles in 3D

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

我发现,在每种情况下,要么有一条交叉线(两个点),要么根本没有交叉点。如果交点只是在边界上,因此只是一个点,在我的情况下可以视为没有交点。

我的场景是这些矩形之一代表一个 "static" 表面,它不能移动或改变。另一个代表一个 "dynamic" 表面,我必须适应它以避免交叉

示例:

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

所以你可以明白为什么 "edge intersections" 与我的情况无关。我正在将 "real" 个交叉点变成边缘交叉点,因此任何边缘交叉点都不需要我做任何事情。

我只是在寻找一个公式,从两组 4 个点(矩形)开始,它会给我它们相交线的两个点,或者会告诉我没有(相关的)路口.

我在这个网站或其他网站上找到的每个公式都不符合我的需要,或者不允许我输入任意矩形(例如,我无法用使用平面或将矩形视为简单的 4 行)

当然,我正在尝试对其进行编码(在 C# 中),因此任何代码答案都会有很大帮助,但我相信即使是纯数学答案也足以让我从中生成代码,因此我会接受仅由伪代码或直接数学公式组成的答案,前提是它们足够简单或解释得足够好让我理解正在发生的事情。

如果您只接受算法而不是完整代码,这里有一个草图:

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