不论凸多边形还是凹多边形,都可以采用向量叉乘的方法来求面积。代码如下
#include "stdafx.h"
#include "stdio.h"
typedef struct tagPoint
{
double x;
double y;
}FPoint;
double MianJi(FPoint *pArray,int NumPoint)
{
if(NumPoint<3)return 0;
double sum = 0;
int m = 1;
for(;;)
{
if(NumPoint < 3)break;
FPoint r1;
r1.x = pArray[m].x - pArray[0].x;
r1.y = pArray[m].y - pArray[0].y;
FPoint r2;
r2.x = pArray[m+1].x - pArray[m].x;
r2.y = pArray[m+1].y - pArray[m].y;
sum += (r1.x * r2.y - r2.x * r1.y);
m++;
NumPoint --;
}
double result = (sum>0)?(sum/2.):(-sum/2.);
return result;
}
//test
void main()
{
FPoint pArray1[4]={{1,1},{1,2},{2,2},{2,1}};
FPoint pArray2[5]={{0,0},{0,2},{2,2},{1,1},{2,0}};
FPoint pArray3[9]={{0,0},{2,0},{2,1},{0,1},{0,2},{-2,0},{-1,0},{-1,-1},{0,-1}};
printf("Area1 = %f\n",MianJi(pArray1,4));
printf("Area2 = %f\n",MianJi(pArray2,5));
printf("Area3 = %f\n",MianJi(pArray3,9));
}