【问题标题】:Get Intersection line between two rectangles in 3D获取 3D 中两个矩形之间的交线
【发布时间】:2019-01-02 20:40:09
【问题描述】:

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

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

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

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

我的情况是这些矩形之一代表一个“静态”表面,它不能移动或改变。另一个代表一个“动态”表面,我必须适应它以避免交叉

例子:

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

所以你可以看到为什么“边缘交叉点”与我的情况无关。我正在将“真正的”交叉点变成边缘交叉点,因此任何边缘交叉点都不需要我对它做任何事情。

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

我在本网站或其他网站上找到的每个公式都不符合我的需要,或者不允许我输入任意矩形(例如,我无法解决使用平面或处理的公式的问题一个只有 4 行的矩形)

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

【问题讨论】:

  • 有很多边缘情况的棘手问题。不简单。 CAD 工具可以很好地做到这一点。为什么你不能使用工具?
  • 这里我没有给出全图,但是矩形实际上是我所拥有的一个很大的简化,所以拥有我们自己的解决方案而不是使用工具更灵活

标签: c# math 3d intersection rectangles


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-01
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多