3D凸面非平面多边形的线段交点

时间:2017-01-13 19:40:00

标签: algorithm 3d graph-theory voronoi

我试图找到一个适当的最佳算法来确定线段是否与3D凸非平面多边形相交。我现在能想到的最好的方法是绘制一条线,将非平面多边形分成两半,确定线段是否位于分割线的右侧或左侧,然后继续分割直到我可以确定交叉点。背后的原因是我可以确定给定点所在的3d球形voronoi图的哪个区域。但是,找到解决方案的时间可能取决于我的行拆分的浮点分辨率。

Spherical Voronoi Diagram

非平面多边形示例

enter image description here

在这个例子中,我将绘制蓝点和单位球体中心之间的线段(在voronoi计算之后添加,它们不是用于计算图表的点)。然后,我需要弄清楚线段与哪个多边形相交,以确定它所在的区域。

1 个答案:

答案 0 :(得分:1)

这可以通过坐标几何来解决。

首先,将多边形划分为三角形。例如,如果多边形是ABCDE,则考虑三角形ABC,ACD和ADE。在您的问题中,线段与多边形相交,当且仅当它与至少一个三角形相交时。我们将检查线段是否以下列方式与三角形相交。

让三角形为KLM,线段为UV。包含KLM的平面的方程式为ax + by + cz + d = 0,含有UV的线的方程式为(x-x_0)/ e =(y-y_0)/ f =( Z-Z_0)/克。通过同时求解这些方程,我们可以找到线与平面交点的坐标P =(x,y,z)。

一旦找到P,我们需要确保它位于UV和KLM上。如果从P到U和V的距离之和等于UV的长度,则前者是真的。对于后者,检查由P和KLM边缘形成的三角形区域(即PKL,PLM和PMK)是否加起来为KLM区域。