110,024
社区成员




/// <summary>
/// 多边形面积计算(不论凸凹)
/// </summary>
/// <param name="count">坐标点数</param>
/// <param name="X">坐标的横坐标集合</param>
/// <param name="Y">坐标的纵坐标集合</param>
/// <returns></returns>
private double Area(int count,double [] X,double [] Y)
{
double area;
if (count < 3)
return 0;
area= Y[0] * (X[count - 1] - X[1]);
for (int i = 1; i <count; i++)
area+= Y[i] * (X[(i - 1)] - X[(i + 1)%count]);
return area/2;
}
/// <summary>
/// 计算多边形面积,应该取绝对值.顺时针时结果为负,反之为正
/// </summary>
/// <param name="count">点数</param>
/// <param name="X">代表横坐标集合</param>
/// <param name="Y">代表纵坐标集合</param>
/// <returns>返回多边形面积</returns>
private double areaDuoBianXing(int count,double[] X, double[] Y)
{
double area=0;
for (int i =0; i <count; i++)
area +=Y[i+1]*X[i] - X[i + 1]*Y[i];
return Math.Abs(area/2);
}
double area(CPoint loca[n])//数组保存定点坐标
{
double a,b,c;
double result=0;
double p;//
for(int i=2;i<n-1;i++)
{
a=sqrt((loca[i-1].x-loca[0].x)^2+(loca[i-1].y-loca[0].y)^2);//第一个边长
b=sqrt((loca[i].x-loca[i-1].x)^2+(loca[i].y-loca[i-1].y)^2);//第二个
c=sqrt((loca[i].x-loca[0].x)^2+(loca[i].y-loca[0].y)^2);//第三个
p=(a+b+c)/2;
result+=sqrt(p*(p-a)(p-b)(p-c));//海伦公式
}
return result;
}
地址:http://www.programfan.com/club/showpost.asp?id=101283&t=o