代码之家  ›  专栏  ›  技术社区  ›  Kaito Kid

获取三维中两个矩形之间的交线

  •  0
  • Kaito Kid  · 技术社区  · 5 年前

    我正试图找到一种方法来得到两个矩形相交的直线(三维空间中的两点)。

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

    但这不是我的问题。在这个问题中,矩形仅被视为边界(周界),而我将矩形作为一个整体来查找(考虑图片框架与图片本身)。

    我已经知道,在每种情况下,都会有一条交叉线(两点),或者根本没有交叉点。如果交叉点只是在边界上,因此只是一个点,在我的例子中,它可以被视为没有交叉点。

    我的方案是,其中一个矩形表示一个“静态”曲面,它不能移动或更改。另一个代表一个“动态”表面,我必须适应它以避免交叉。

    例子:

    enter image description here

    一旦我得到p1和p2,它们是三维空间中的点,我的目标是将动态矩形修改为三维多边形,该多边形将不再穿过静态矩形,如下所示:

    enter image description here

    所以你可以看到为什么“边缘交叉点”和我的情况无关。我把“真实”的交叉点变成了边缘交叉点,所以任何边缘交叉点都不需要我做任何事情。

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

    我在这个网站或其他网站上找到的每一个公式都不符合我的需要,或者不允许我输入任意的矩形(例如,我不能用一个使用平面的公式来解决我的问题,或者只将一个矩形视为4行)

    当然,我正试图对它进行编码(用C),因此任何代码答案都是一个很大的帮助,但我相信,即使是一个纯数学的答案也足以让我从中生成代码,因此我将接受一个仅由伪代码或直接数学公式组成的答案,只要它们足够简单或解释清楚。我足以理解发生了什么。

    1 回复  |  直到 5 年前
        1
  •  1
  •   SergGr    5 年前

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

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