我也来写多边形面积

看了猫哥的多边形计算有感。 提供猫哥文章的传送门。  传送门

 首先画了个多边形(四边形)。 然后画了个直角坐标系。 突然发现好像可以通过求定积分的方式来求多边形面积= =。  同叉乘一样,定积分也是有正有负的。以点序:p1,p2,p3,p4为例子, p1,p2与x轴围成的面积、p2,p3与x轴围成的面积、p3,p4与x轴围成的面积、p4,p1与x轴围成的定积分相加,(重复部分会自动抵消),然后对都到的面积求和。就可以得到多边形面积!!。来张渣渣图做示意图。

求2点和x轴的定积分。其实是t形面积。s = (y1+y2)*(x1-x2) (有正负哦 亲)

代码为

double integrationArea(const myPoint &point1, const myPoint &point2)
 {   
    return 0.5 * (point2.x - point1.x) * (point2.y + point1.y); // 有正有负   
}  

然后计算总面积为

double polyArea(const myPoint allPoints[], int length) 
{   
    if (allPoints == NULL || length <= 2)
    {
        return 0.0; //不存在面积
    }
    
    double area = 0.0;   
    for (int i = 0; i < length - 1; ++ i)
    {   
        area += integrationArea(allPoints[i], allPoints[i + 1]);   
    } 
    //最后一个点 和 开始的点
    area += integrationArea(allPoints[length - 1], allPoints[0]);   
    return area >= 0.0 ? area : -area;   
} 

完成。

posted @ 2013-03-31 21:58  无咎  阅读(468)  评论(0)    收藏  举报