我也来写多边形面积
看了猫哥的多边形计算有感。 提供猫哥文章的传送门。 传送门
首先画了个多边形(四边形)。 然后画了个直角坐标系。 突然发现好像可以通过求定积分的方式来求多边形面积= =。 同叉乘一样,定积分也是有正有负的。以点序: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; }
完成。

浙公网安备 33010602011771号