【问题标题】:Line Segment Intersection of a 3D Convex Non-Planar Polygon3D 凸非平面多边形的线段交点
【发布时间】:2017-01-13 19:40:00
【问题描述】:

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

图表

非平面多边形示例

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

【问题讨论】:

  • 你有多边形还是多面体?
  • @RazimanT.V.根据定义,球体所包含的形状是多面体。但是,在我的代码中,它存储为多边形的集合。在寻找交叉点时,我只关心多面体的各个多边形面。我相信在这种情况下多面体面的正确定义是 3D 凸非平面多边形

标签: algorithm 3d graph-theory voronoi


【解决方案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)/g。通过同时求解这些方程,我们可以找到直线与平面相交的坐标 P=(x,y,z)。

一旦找到 P,我们需要确保它同时位于 UV 和 KLM 上。如果从 P 到 U 和 V 的距离之和等于 UV 的长度,则前者是正确的。对于后者,检查由P和KLM(即PKL、PLM和PMK)的边组成的三角形的面积是否等于KLM的面积。

【讨论】:

  • 我不确定这是否适用于非平面多边形。在这种情况下,我想不出如何将几何简化为 ax+by+cz+d=0 。 See here 用于非平面多边形的可视化表示。
  • 你能给出一个示例非平面多边形的顶点坐标吗?
  • 这里的多边形中的一个的例子:[[-0.01413831,-0.1588434,0.98720255],[-0.28359024,-0.30261862,0.90994426],[-0.24100966,-0.39396359,0.88696507],[0.54257997 , -0.8064585 , 0.23501419], [ 0.6377325 , -0.4882386 , 0.5957519 ], [ 0.39324987, -0.18387223, 0.90085823]]
  • 但是这种“非平面多边形”的表面并不是从顶点唯一定义的。例如考虑多边形 [A=(0,0,0), B=(1,0,0), C=(0,1,0), D=(0,0,1)] - 有在多边形内部“填充”的多种方式。
  • 由于我正在实施的搜索的性质,它的填充方式实际上并不重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 2013-02-12
相关资源
最近更新 更多