3D平面多边形之间的交点

时间:2011-06-01 01:44:27

标签: algorithm 3d intersection polygons

如何在两个(或更多)3D平面多边形之间找到交点(对于最简单的情况,它们都是凸的)? 寻求算法能够提供交叉线,如果有的话。 请注意,为无限平面平面情况提出的方法没有用。

3 个答案:

答案 0 :(得分:3)

有两种情况:

两个多边形都位于同一平面上。

查找第一个多边形的所有内部点。

任意取第一个多边形,遍历第二个多边形的所有顶点,并确定它们是位于第一个多边形的内部还是外部。凸多边形很容易做到这一点:请参阅here

查找2个多边形之间的交叉点

要找到交点,请获取其中一个多边形的每条边,并遍历另一个多边形的所有边,以查找它们是否在任何位置相交。这可以通过使用intersection of 2 lines的公式找到。

交叉区域是在内部点和交叉点处形成顶点的多边形。

2个多边形位于不同的平面上。

找到第二个多边形与第一个多边形平面的交点。您可以通过考虑第二个多边形的每个边,并找到边和第一个多边形的平面之间的交点来完成此操作。这可以使用line and a plane

之间的交集公式找到

检查您找​​到的交叉点是否位于第一个多边形的内部或外部。

答案 1 :(得分:1)

这是一种方法。通过将一个多边形旋转到XY平面,可以将3D问题简化为2D问题(主要是),并且通常不会出现太多的性能问题。

  1. 旋转第一个多边形的点,使其位于X-Y平面上。
  2. 以与第一个相同的方向和数量旋转第二个多边形的点。
  3. 检查第二个多边形中的每一行,并查看它是否以及在何处拦截X-Y平面。对于凸多边形,这应该在A点和B点发生两次。
  4. 查找AB线与第一个多边形边缘的所有交点。如果第一个多边形是凸的,则应该有0,1或2个交点。
  5. 案例:零交点:AB线完全位于第一个多边形的内部或外部。如果在里面,AB是平面的交叉线。如果在外面,没有交叉点。
  6. 案例:一个交叉点,C点:A或B在第一个平面内。平面的相交线是在点(A或B)到C的内部。
  7. 案例:两个交叉点:平面的交叉线为AB
  8. 将相交线旋转回原始位置,与步骤1中完成的旋转相反。
  9. 将这种方法扩展到非凸多边形是留给练习者的练习。 :)(实际上非​​常简单。)

    检查点是否在2D多边形内部的一种方法是从该点向上与多边形的所有边相交。 0或2:外面。 1:里面。 (这也适用于外部和内部使用偶数和奇数的非凸多边形。)

答案 2 :(得分:0)

对于两个多边形共面的情况,这里至少是这种特殊情况的解决方案:

http://www.iro.umontreal.ca/~plante/compGeom/algorithm.html

它甚至有一个很好的小程序显示算法。