19,464
社区成员
发帖
与我相关
我的任务
分享
float get_polygon_area( vector<Point3d> & vpt )
{
//去掉相同点和共线点
//...
if( vpt.size() < 3 )
return 0.0f;
// 用行列式求值
float area;
Point3d p1, p2, p3, p4;
p1 = vpt[ 0 ];
p2 = vpt[ 1 ];
p3 = vpt[ vpt.size() - 1 ];
p4 = vpt[ vpt.size() - 2 ];
area = p1.y * (p3.x - p2.x) + p3.y * (p4.x - p1.x);
p3 = p1;
for ( unsigned int i = 1; i < vpt.size() - 1; ++i )
{
p1 = vpt[ i ];
p2 = vpt[ i + 1 ];
area = area + p1.y * ( p3.x - p2.x );
p3 = p1;
}
// area的正负可以用来判断时针顺序
return fabs( area / 2.0f );
}