求多边形面积的简单方法
不论凸多边形还是凹多边形,都可以采用向量叉乘的方法来求面积。
向量叉乘的模等于以他们为相邻边的平行四边形的面积。
所以,该两向量组成的三角形的面积为平行四边形的面积的一半。
最后的结果要除以2。
代码如下
#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;
FPoint r1;
FPoint r2;
double sum = 0;
int m = 1;
for(;NumPoint>=2;NumPoint--)
{
r1.x = pArray[m].x - pArray[0].x;
r1.y = pArray[m].y - pArray[0].y;
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++;
}
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));
}
另外,如果是三角形并且知道边长的话可以用海伦公式求面积。
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
S=√[p(p-a)(p-b)(p-c)]
公式里的p为半周长:
p=(a+b+c)/2
作者:wuyuan
本文来自Wuyuan's Blog 转载请注明,谢谢!
文章地址: https://www.wuyuans.com/blog/detail/53