2

如果我有一个平面,比如说 xy 平面和一个可以在 3 维中任意旋转/平移的矩形棱镜。是否有任何很酷的算法/方法可用于确定两者之间的交叉区域?

4

2 回答 2

2

一种方法是明确地找到R棱镜和平面之间的多边形相交R区域,对三角形的面积进行三角剖分并求和以给出总相交面积。

相交多边形的顶点R可以通过在棱镜边缘和平面之间执行一系列线平面相交测试来找到。

基于平面/棱镜的相对方向,相交的多边形可以采用许多不同的配置(即它并不总是一个矩形!)。给定一个规则的棱镜,相交区域应该总是凸的,允许三角测量作为一个简单的扇形获得

R给定相交总面积的三角剖分只是三角形面积的总和。

于 2013-07-16T18:40:43.977 回答
1

一旦你有了交集的多边形区域,你就不需要对其进行三角测量来计算它的面积。有一个更简单的算法:

float area = 0.0f;
// Run through all segments
for (int i = 0; i < corners.Length; i++)
{
    // Get end points of segments
    Vector2 A = corners[i];
    Vector2 B = corners[(i+1) % corners.Length];

    // Add the signed(!) area of a quadrangle with two corners A, B 
    // and two corners with same y values on the y axis
    // 
    //   |---------A
    //   |    +   /
    //   |-------B
    // 
    //   |-------B
    //   |    -   \
    //   |---------A
    // 
    area += 0.5f * (A.x + B.x) * (B.y - A.y);  
}

参照。http://alienryderflex.com/polygon_area/

于 2017-06-15T12:32:57.317 回答