问题
求凸多边形面积。
三角形面积
向量v1和v2的叉积的值恰好等于由v1、v2组成的平行四边形的面积,组成的三角形的面积的2倍。
因此有
Area3=2v1×v2 计算三角形面积的时间复杂度为O(1)。
多边形面积
二维坐标系上的n多边形有n个顶点,随意选取一个顶点p。p与多边形上其他每条边的两个端点组成一个三角形(共n−2个三角形),像这样顶点p与所有边分别组成的所有三角形的面积之和,即为该多边形的面积。注意到叉积的值可能为负数,最终的面积取绝对值即可。如图所示:
因此有
Arean=2∑i=1n−1vi×vi+1 计算多边形面积的时间复杂度为O(n)。
源码
ConvexPolygonArea.h
ConvexPolygonArea.cpp
测试
ConvexPolygonAreaTest.cpp