二维几何-多边形

版权声明:转载请注明出处。 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;
}

猜你喜欢

转载自blog.csdn.net/baidu_38304645/article/details/83245974