版权声明:转载请注明出处。 https://blog.csdn.net/baidu_38304645/article/details/83245974
如何计算多边形的有向面积?如果多边形是凸的,可以从第一个顶点出发把凸多边形分成n-2个三角形,然后把面积加起来。
double ConvexPolygonArea(Point *p, int n)
{
double area;
int i;
area = 0;
for(i = 1; i < n-1; i++)
area += Cross(p[i]-p[0], p[i+1]-p[0]);
return area / 2;
}
其实这个方法对非凸多边形也适用。由于三角形面积是有向的,在外面的部分可以正负抵消掉。实际上,可以以任意点出发进行划分。
可以取p[0]点为划分顶点,一方面可以少算两个叉积(0和任意向量的叉积都等于0),另一方面也减少乘法溢出的可能性,还不用特殊处理(i=n-1的时候,下一个顶点是p[0]而不是p[n],因为p[n]不存在)。
double PolygonArea(Point *p, int n)
{
double area;
int i;
area = 0;
for(i = 1; i < n-1; i++)
area += Cross(p[i]-p[0], p[i+1]-p[0]);
return area / 2;
}