根据闭合的多边形坐标求面积
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
}
}
/ * *****************************************************************
* 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
}
}
相关文章推荐
- 根据各顶点坐标求多边形面积
- 根据所给的多边形各个顶点的坐标求多边形的面积公式
- 根据坐标计算任意多边形的面积
- js根据经纬度计算多边形面积
- 多边形面积的坐标求法
- 根据经纬度计算多边形面积
- 根据点的坐标计算不规则图形面积的公式
- js版根据经纬度计算多边形面积(墨卡托投影)
- js版根据经纬度计算多边形面积(墨卡托投影)
- 地理坐标转3度或6度分带的算法以及任意多边形求面积的方法(与Arcmap相差0.81%)
- 求多边形面积(已知坐标)
- hdoj 2036 已知坐标求多边形面积
- 根据坐标计算面积的方法
- 根据经纬度画多边形(返回各个顶点坐标)
- js版根据经纬度计算多边形面积(墨卡托投影)
- 多边形面积的求法(已知每个点的坐标)hdu2036
- arcengine怎么样根据几个点的坐标绘制出多边形??-hl3292整理
- 利用坐标求任意多边形面积
- 从txt文件读取多边形点的坐标,计算任意多边形的面积