您的位置:首页 > 其它

根据闭合的多边形坐标求面积

2010-05-06 14:46 232 查看
根据多边形的坐标求面积,这是刚开始做autocad开发时写的,后来发现有Region概念,可以根据属性获取,哈哈,多余的了,发上来玩玩

/ * *****************************************************************

* FileName: Polygon.CS
* File Created: 2010-4-9 15:26
* Description: 多边形计算公式:西格玛(sigma)[i=1->n]{Xi(Y(i+1)-Y(i-1))}/2
* Purpose :
* History:
* Creator : 成吉思汗

* ******************************************************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Client.CalculateAcreage
{
/// <summary>
/// 多边形计算面积
/// </summary>
public class Polygon
{
#region 构造函数
public Polygon() { }
public Polygon(List<Point> list)
{
_pointList = list;
}
#endregion

#region 根据多边形的坐标求出多变行的面积
/// <summary>
/// 根据多边形的坐标求出多变行的面积
/// </summary>
/// <param name="list">坐标</param>
/// <returns></returns>
private double GetAcreage(List<Point> list)
{
if (null == list)
return 0;
int count = list.Count-1; // 数组的长度=多边行的边数-1

if (count < 3)
return 0;
double acreage = 0;//多边形的面积
// 面积=西格玛[i=1->n]{Xi(Y(i+1)-Y(i-1))}/2,i表示多边行边数,假设6边行,如i增加到6时i+1=7时则X(i+1)就是X(6)坐标,如开始i从1开始i-1=0时就是X(1)的坐标

for (int i = 0; i <= count; i++)
{
if (i == 0)
{
acreage += list[i].X * (list[i + 1].Y - list[count].Y);

continue;
}
if (i == count)
{
acreage += list[i].X * (list[0].Y - list[i - 1].Y);

continue;
}
acreage += list[i].X * (list[i + 1].Y - list[i - 1].Y);

}

return acreage/2;
}
#endregion

#region 根据多边形的变长求面积
/// <summary>
/// 根据多边形的变长求面积
/// </summary>
/// <param name="entity"></param>
/// <returns></returns>
public double GetAcreage(Polygon entity)
{
double acreage = 0;//多边形的面积

acreage = GetAcreage(entity.PointList);
return acreage;
}
#endregion

#region 属性
List<Point> _pointList = new List<Point>();
/// <summary>
/// 多边行顶点坐标集合
/// </summary>
public List<Point> PointList
{
set { _pointList = value; }
get { return _pointList; }
}
#endregion
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: