找到由线段(3D多边形上的原点)切割的切片

时间:2012-07-22 05:44:33

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

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

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

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

我有一点[p, q, r]

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

我完全迷失在这里。任何指针都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

我们可以在不失一般性的情况下假设由点和点形成的三角形。线段(以下称T)位于x-y平面。 (否则,适当地旋转一切)。

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

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

运行时间为O(number of faces)

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

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