ConvexPolygonArea 凸多边形面积

问题

求凸多边形面积。

三角形面积

向量v1\vec{v_{1}}v2\vec{v_{2}}的叉积的值恰好等于由v1\vec{v_{1}}v2\vec{v_{2}}组成的平行四边形的面积,组成的三角形的面积的22倍。

因此有

Area3=v1×v22Area_{3} = \frac {\vec{v_1} \times \vec{v_2}} {2}

计算三角形面积的时间复杂度为O(1)O(1)

多边形面积

二维坐标系上的nn多边形有nn个顶点,随意选取一个顶点pppp与多边形上其他每条边的两个端点组成一个三角形(共n2n - 2个三角形),像这样顶点pp与所有边分别组成的所有三角形的面积之和,即为该多边形的面积。注意到叉积的值可能为负数,最终的面积取绝对值即可。如图所示:

因此有

Arean=i=1n1vi×vi+12Area_{n} = \frac {\sum_{i=1}^{n-1} \vec{v_i} \times \vec{v_{i+1}}} {2}

计算多边形面积的时间复杂度为O(n)O(n)

源码

ConvexPolygonArea.h

ConvexPolygonArea.cpp

测试

ConvexPolygonAreaTest.cpp

Last updated