获取 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# 中),因此任何代码答案都会有很大帮助,但我相信即使是纯数学答案也足以让我从中生成代码,因此我会接受仅由伪代码或直接数学公式组成的答案,前提是它们足够简单或解释得足够好让我理解正在发生的事情。
如果您只接受算法而不是完整代码,这里有一个草图:
- 从矩形中构建 2 个平面(任何 3 个点都将像 this answer 中那样)
- 找到这 2 个平面的交线
I
,如 this answer 或找出平面平行,因此没有交点
- 找到
I
线与包含矩形所有边的线的交点,如 this answer
- 检查上一步找到的一些点是否位于矩形(线段)的相应边内。此步骤可能会与上一步合并,但为简单起见,我将其单独放置。现在你可能有 0、1 或 2 个线段代表
I
线与你的两个矩形的交点(请注意,这里的点被视为两端相同的线段的边缘情况)。如果你没有 2 段,则矩形没有交集。
- 假设在上一步中您在直线
I
上找到了 2 个线段(每个矩形一个),您只需要找到它们的交点,这就是您的答案(同样,空意味着没有交点) .
我正在尝试找到一种方法来获取两个矩形之间的交点线(3D 中的两个点 space)。
我运行进入这个问题:Intersection between two rectangles in 3D
但这不是我的问题。在那个问题中,矩形仅被视为边界(周长),而我正在寻找整个矩形(考虑相框与图片本身)。
我发现,在每种情况下,要么有一条交叉线(两个点),要么根本没有交叉点。如果交点只是在边界上,因此只是一个点,在我的情况下可以视为没有交点。
我的场景是这些矩形之一代表一个 "static" 表面,它不能移动或改变。另一个代表一个 "dynamic" 表面,我必须适应它以避免交叉
示例:
一旦我获得 p1 和 p2,它们是 3D 中的点 space,我的目标是将动态矩形修改为 3d 多边形,它将不再与静态矩形交叉,如下所示:
所以你可以明白为什么 "edge intersections" 与我的情况无关。我正在将 "real" 个交叉点变成边缘交叉点,因此任何边缘交叉点都不需要我做任何事情。
我只是在寻找一个公式,从两组 4 个点(矩形)开始,它会给我它们相交线的两个点,或者会告诉我没有(相关的)路口.
我在这个网站或其他网站上找到的每个公式都不符合我的需要,或者不允许我输入任意矩形(例如,我无法用使用平面或将矩形视为简单的 4 行)
当然,我正在尝试对其进行编码(在 C# 中),因此任何代码答案都会有很大帮助,但我相信即使是纯数学答案也足以让我从中生成代码,因此我会接受仅由伪代码或直接数学公式组成的答案,前提是它们足够简单或解释得足够好让我理解正在发生的事情。
如果您只接受算法而不是完整代码,这里有一个草图:
- 从矩形中构建 2 个平面(任何 3 个点都将像 this answer 中那样)
- 找到这 2 个平面的交线
I
,如 this answer 或找出平面平行,因此没有交点 - 找到
I
线与包含矩形所有边的线的交点,如 this answer - 检查上一步找到的一些点是否位于矩形(线段)的相应边内。此步骤可能会与上一步合并,但为简单起见,我将其单独放置。现在你可能有 0、1 或 2 个线段代表
I
线与你的两个矩形的交点(请注意,这里的点被视为两端相同的线段的边缘情况)。如果你没有 2 段,则矩形没有交集。 - 假设在上一步中您在直线
I
上找到了 2 个线段(每个矩形一个),您只需要找到它们的交点,这就是您的答案(同样,空意味着没有交点) .