2013-07-16 132 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/