對於非複雜的多邊形,這是很簡單的:如何找到一個複雜的多邊形的面積 - C++
A = 1/2 * (x1*y2 - x2*y1 + x2*y3 - x3*y2 + ... + x(n-1)*yn - xn*y(n-1) + xn*y1 - x1*yn)
這是我在C++實現:
struct Point {
double x, y;
} point[210];
double area(int n) {
double a=0, b=0;
for(int i=0; i<n-1; ++i) {
a += point[i].x * point[i+1].y;
b += point[i].y * point[i+1].x;
}
return (a - b)/2;
}
但如果多邊形是複雜的?有沒有類似的方法找到它的區域?
注:我試圖使用相同的技術,但它沒有奏效。對於多邊形
(0,0) , (0,7) , (4,3) , (0,3) , (2,4) , (2,1) , (0, 0)
上面的公式給我28.000,應該是26.000。我可以給出的唯一解釋是三角形(0,3),(2,4),(2,3)被計數兩次(點(2,3)是分段(0,3), (4,3)和(2,4),(2,1))。
您正在使用的公式是用於非自相交多邊形,但是對於直線(4,3) - (0,3)和(2,4) - (2,1)有交點。對於自交界多邊形,您需要制定一個[決定](http://en.wikipedia.org/wiki/Polygon#Self-intersecting_polygons)如何處理交叉點。 – denahiro