计算平面与矩形棱镜相交面积

时间:2013-07-16 18:08:07

标签: algorithm math geometry

如果我有一架飞机,让我们说xy平面,以及一个可以任意旋转/平移三维的矩形棱镜。有没有很酷的算法/方法可以用来确定两者之间的交叉区域?

2 个答案:

答案 0 :(得分:2)

一种方法是明确地在棱镜和平面之间找到​​交叉点R的多边形区域,三角测量R并将三角形的面积相加以得出总交叉区域。

可以通过在棱镜的边缘和平面之间执行一系列line-plane intersection tests来找到交叉多边形R的顶点。

基于平面/棱镜的相对方向,交叉多边形可以采用多种不同的配置(即它不一定是矩形!)。给定一个规则的棱镜,交叉区域应该始终是凸的,允许triangulation to be obtained as a simple fan

鉴于R的三角剖分,交叉总面积只是三角形区域的总和。

答案 1 :(得分: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/