WUYUANS
Just for Sharing

求多边形面积的简单方法

2012年01月01日 分类:学习笔记C++

不论凸多边形还是凹多边形,都可以采用向量叉乘的方法来求面积。
向量叉乘的模等于以他们为相邻边的平行四边形的面积。
所以,该两向量组成的三角形的面积为平行四边形的面积的一半。
最后的结果要除以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