我有一组三角形顶点(多边形的面),比如
[[[a, b, c], [d, e, f], [g, h, i]], ...]
我有一个线段,由 2 个 3D 顶点表示,比方说[[j, k, l], [m, n, o]]
。
我有一点[p, q, r]
。
我想要做的是,通过线段投影多边形上的点,并检查它是否完全切割多边形(我认为 4 个接触点就足够了?我可能错了)。如果是这样,我需要位于边缘和顶点上的所有交点。
我完全迷失在这里。任何指针将不胜感激。
我有一组三角形顶点(多边形的面),比如
[[[a, b, c], [d, e, f], [g, h, i]], ...]
我有一个线段,由 2 个 3D 顶点表示,比方说[[j, k, l], [m, n, o]]
。
我有一点[p, q, r]
。
我想要做的是,通过线段投影多边形上的点,并检查它是否完全切割多边形(我认为 4 个接触点就足够了?我可能错了)。如果是这样,我需要位于边缘和顶点上的所有交点。
我完全迷失在这里。任何指针将不胜感激。
我们可以不失一般性地假设由点和线段(以下称为 T)形成的三角形位于 xy 平面内。(否则,适当地旋转一切)。
我们遍历三角形面,对于任何一对面的 y 坐标具有不同符号的顶点(即,对于切割 xy 平面的任何边),我们检查边与 xy 平面的交点并确保它是T内。
它认为当且仅当所有此类检查都为真时,T“完全切割多边形”。
运行时间为O(number of faces)
。
描述的所有操作都非常简单。例如,检查某物是否在 T 的范围内只是用定义 T 的两条线的方程(即从点到线段的端点)检查两个不等式。
所有带有边缘(以及顶点)的 POI 都可以在循环内计算 - 它只是带有 xy 平面的边缘的 POI。