为什么计算面积小于0?
来源:互联网 发布:儿童编程培训班多少钱 编辑:程序博客网 时间:2024/05/01 07:04
一想到面积的计算,就可能使用IArea接口。实现IArea接口的常用类包括:Envelope、Polygon和Ring。Envelope表示的是一个矩形对象,Polygon表示的是一个任意复杂的区域,Ring表示一个简单的环,这个环由一组相互连接的段(segment)组成。所以,只要对象实现了IArea接口,那么获取面积就非常简单了。下面是一段获取面积的代码:
IArea pArea = theGeometry as IArea;
if (pArea != null)
{
double area = pArea.Area;
//...
}
一切就这么简单。但是,实际运行过程中,居然会出现面积小于0的情况,真是百思不得其解啊。仔细查看了帮助文档,才发现原来Ring还分为两类,一类是外环(exterior ring),一类是内环(interior ring)。区分这二者的直接办法是看坐标点的方向,如果是顺时针,那么就是外环,如果逆时针就是内环。内环的面积是小于0的,外环的面积是大于0的。假设有如下图所示的四个点:
假设有如下代码:
IPoint p1, p2, p3, p4;
//创建第一个环
RingClass pc1 = new RingClass();
pc1.AddPoint(p1);
pc1.AddPoint(p2);
pc1.AddPoint(p3);
pc1.AddPoint(p4);
double d1 = pc1.Area;
bool isExterior1 = pc1.IsExterior();
//创建第二个环
RingClass pc2 = new RingClass();
pc2.AddPoint(p1);
pc2.AddPoint(p4);
pc2.AddPoint(p3);
pc2.AddPoint(p2);
double d2 = pc2.Area;
bool isExterior2 = pc2.IsExterior;
你仔细比较才能发现,pc1添加坐标点的次序是顺时针的,pc2的添加坐标点顺序是逆时针的,所以pc1是外环,pc2是内环。这样,下面的几个结论就显而易见了:
d1>0
isExterior1 = true
d2<0
isExterior2 = false
- 为什么计算面积小于0?
- 计算面积
- 计算面积
- 计算面积
- 计算面积
- 计算矩形面积
- 计算多边形面积 绿色
- 多边形面积计算
- 计算多边形的面积
- 面积计算系统
- 计算三角形面积
- 函数调用计算面积
- 计算多边形面积
- 对称矩阵面积计算
- 计算面积,体积,表面积。
- 计算多边形的面积
- ArcGis 面积计算
- 计算多边形的面积
- 函数依赖闭包求关系模式的候选关键字
- 作弊:存在并盛行着
- phpMyAdmin下载、安装和使用入门 222259
- TestComplete 8 在录制功能上的改进
- 《STL源码剖析》学习笔记之一 迭代器
- 为什么计算面积小于0?
- linux学习笔记-读《Linux编程技术详解》-守护进程
- 谎言的真相
- 在对话框上创建视图的方法总结
- 打开"我的电脑"寻找项目?
- 对二维字符数组排序(2sort和1qsort)
- 【小阅读^大脑袋】0421 NO.355
- MS sql server删除服务器组...
- 装了VMware之后VS08多了一个菜单项