我一直试图找到一个算法来计算两个三角形的交叉区域,但我找不到任何三角形 . 任何人都可以提供如何编写此算法的线索吗?
我想要像:
double getAreaOfIntersection(Vector2 p1,Vector2 p2, Vector2 p3,Vector2 p4,Vector2 p5,Vector2 p6 )
其中pX代表2个三角形 .
您可以首先通过裁剪算法计算描述交叉区域的多边形,例如:
Sutherland-Hodgman algorithm
然后你会计算得到的凸多边形的面积,这很容易,参见例如:
Area of a Convex Polygon
确定一个点位于给定多边形内是否容易(对三角形来说更容易,因为它们是简单的多边形) . 您可以使用绕组数算法(以及简单多边形的交叉数算法),这些算法已经实现并且很好地解释了here .
使用此方法,您可以获得交叉点多边形的所有顶点:
三角形的顶点pX也包含在另一个三角形中
两个三角形相交的点(参见intersection of line segments)
您将需要遍历边缘以找到所有交叉点,因此只要您只想确定三角形的交点,这应该足够快,但我不建议尝试以这种方式查找任意多边形的交点 .
2 回答
您可以首先通过裁剪算法计算描述交叉区域的多边形,例如:
Sutherland-Hodgman algorithm
然后你会计算得到的凸多边形的面积,这很容易,参见例如:
Area of a Convex Polygon
确定一个点位于给定多边形内是否容易(对三角形来说更容易,因为它们是简单的多边形) . 您可以使用绕组数算法(以及简单多边形的交叉数算法),这些算法已经实现并且很好地解释了here .
使用此方法,您可以获得交叉点多边形的所有顶点:
三角形的顶点pX也包含在另一个三角形中
两个三角形相交的点(参见intersection of line segments)
您将需要遍历边缘以找到所有交叉点,因此只要您只想确定三角形的交点,这应该足够快,但我不建议尝试以这种方式查找任意多边形的交点 .