1. 程式人生 > >二維幾何-多邊形

二維幾何-多邊形

如何計算多邊形的有向面積?如果多邊形是凸的,可以從第一個頂點出發把凸多邊形分成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;
}