2013-07-16 93 views

回答

2

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

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

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

给定R的三角剖分,总交集面积就是三角形区域的总和。

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/