【问题标题】:Find the slice cut by a line segment, an origin point on a 3D polygon查找由线段切割的切片,即 3D 多边形上的原点
【发布时间】:2012-07-22 05:44:32
【问题描述】:

我有一个三角形顶点数组(多边形的面),类似于

[[[a, b, c], [d, e, f], [g, h, i]], ...]

我有一条线段,由 2 个 3D 顶点表示,比如说[[j, k, l], [m, n, o]]

我有一个观点[p, q, r]

我想要做的是,通过线段投影多边形上的点,并检查它是否完全切割多边形(我认为 4 个接触点就足够了?我可能错了)。如果是这样,我需要位于边缘和顶点上的所有交点。

我完全迷路了。任何指针将不胜感激。

【问题讨论】:

  • 多边形是二维的。多面体需要一个平面才能被切割。
  • @IgnacioVazquez-Abrams 不知道它被称为多面体。谢谢! “需要飞机”是什么意思?
  • 一条线不能分割多面体;它没有足够的尺寸。
  • 是的,如果我错了,请纠正我,但是点和线段不够吗?该平面可以被认为是从点到线段的每个点的射线。那不会构造一个无限平面吗?切片就够了吗?
  • 好的,我明白问题现在在问什么了。但是会有无数个交点;也许您应该将要求限制在边缘和顶点的交点。

标签: algorithm language-agnostic 3d polygon line-segment


【解决方案1】:

我们可以不失一般性地假设由点和线段(以下称为 T)形成的三角形位于 x-y 平面上。 (否则,请适当旋转所有内容)。

我们循环遍历三角形面,对于任何一对面的 y 坐标具有不同符号的顶点(即,对于切割 x-y 平面的任何边),我们检查边与 x-y 平面的交点,然后确保它在 T 内。

它认为当且仅当所有这些检查都为真时,T“完全切割多边形”。

运行时间为O(number of faces)

描述的所有操作都非常简单。例如。检查某物是否在 T 的范围内只是用定义 T 的两条线的方程(即从点到线段的端点)检查两个不等式。

所有带有边(以及顶点)的 POI 都可以在循环内计算 - 它只是带有 x-y 平面的边的 POI。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    相关资源
    最近更新 更多