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

问题描述

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

解决方法

        有两种情况: 两个多边形位于同一平面上。 找到第一个多边形的所有内部点。 任意获取第一个多边形,遍历第二个多边形的所有顶点,并确定它们位于第一个多边形的内部还是外部。对于凸多边形,这样做很容易:请参见此处。 找到两个多边形之间的交点 要找到相交点,请选取一个多边形的每个边,然后遍历另一个多边形的所有边以查找它们是否在任何地方相交。这可以通过使用两条线的交点的公式来找到。 相交区域是在内部点和相交点处形成有顶点的多边形。 2个多边形位于不同的平面上。 找到第二个多边形与第一个多边形的平面的交点。您可以通过考虑第二个多边形的每个边并找到该边与第一个多边形的平面之间的交点来实现。可以使用线和平面之间的相交公式来找到。 检查找到的相交点是在第一个多边形的内部还是外部。     ,        这是一种方法。通过将一个多边形旋转到XY平面,您可以将3D问题简化为2D问题(大多数情况下),并且通常不会过多地影响性能。 旋转第一个多边形的点,使其位于X-Y平面上。 以与第一个相同的方向和数量旋转第二个多边形的点。 检查第二个多边形中的每条线,查看其是否和X-Y平面相交。对于凸多边形,这应该在点A和B发生两次。 查找线AB与第一个多边形的边缘的所有交点。如果第一个多边形是凸的,则应该有0、1,或2个交点。 情况:零交集:线AB完全在第一个多边形内或外。如果在内部,则AB是平面的相交线。如果在外面,则没有路口。 案例:一个交点,C点:A或B都在第一个平面内。平面的相交线是C的内点(A或B)。 案例:两个交叉点:飞机的相交线是AB 将相交线旋转回其原始位置,与步骤1中所做的旋转相反。 留给读者的练习是将此方法扩展到非凸多边形。 :)(实际上很容易。) 一种检查点是否在2D多边形内的方法是获取从该点开始的线与该多边形的所有边的交点。 0或2:外面。 1:里面。 (这也适用于对外部和内部使用偶数和奇数的非凸多边形。)     ,        对于两个多边形共面的情况,那么这里至少是此特定情况的解决方案: http://www.iro.umontreal.ca/~plante/compGeom/algorithm.html 它甚至有一个很好的applet来显示算法。