/// <summary>/// 获取顺时针多边形/// </summary>/// <param name="geometry">参数可以为geometry或polygon</param>/// <returns></returns>public IGeometry GetClockwisePolygon(IGeometry geometry){IGeometry geoRseult = geometry;IPointCollection pcollection = geometry as IPointCollection;if (!isClockwise(pcollection)){System.Object mtMissing = System.Reflection.Missing.Value;IPointCollection newpcollection = new PolygonClass();for (int i = pcollection.PointCount-1; i >-1; i--){IPoint pt = pcollection.get_Point(i);newpcollection.AddPoint(pt, ref mtMissing, ref mtMissing);}geoRseult = newpcollection as IGeometry;}return geoRseult;}//判断多边形是逆时针还是顺时针,顺时针为truepublic static bool isClockwise(IPointCollection pointList){double maxY = 0.0D;int index = 0;//找到Y值最大的点及其前一点和后一点for (int i = 0; i < pointList.PointCount; i++){IPoint pt = pointList.get_Point(i);if (i == 0){maxY = pt.Y;index = 0;continue;}if (maxY < pt.Y){maxY = pt.Y;index = i;}}int front = index == 0 ? pointList.PointCount - 2 : index - 1;int middle = index;int after = index + 1;//利用矢量叉积判断是逆时针还是顺时针。设矢量P = ( x1, y1 ),Q = ( x2, y2 ),则矢量叉积定义为由(0,0)、p1、p2和p1+p2    //所组成的平行四边形的带符号的面积,即:P × Q = x1*y2 - x2*y1,其结果是一个标量。//显然有性质 P × Q = - ( Q × P ) 和 P × ( - Q ) = - ( P × Q )。//叉积的一个非常重要性质是可以通过它的符号判断两矢量相互之间的顺逆时针关系://若 P × Q > 0 , 则P在Q的顺时针方向。//若 P × Q < 0 , 则P在Q的逆时针方向。//若 P × Q = 0 , 则P与Q共线,但可能同向也可能反向。//解释://a×b=(ay * bz - by * az, az * bx - ax * bz, ax * by - ay * bx) 又因为az bz都为0,所以a×b=(0,0, ax * by - ay * bx)//根据右手系(叉乘满足右手系),若 P × Q > 0,ax * by - ay * bx>0,也就是大拇指指向朝上,所以P在Q的顺时针方向,一下同理。IPoint frontPt = pointList.get_Point(front);IPoint middlePt = pointList.get_Point(middle);IPoint afterPt = pointList.get_Point(after);return (afterPt.X - frontPt.X) * (middlePt.Y - frontPt.Y) - (middlePt.X - frontPt.X) * (afterPt.Y - frontPt.Y) > 0.0D;}

ArcEngine逆时针多边形转换为顺时针相关推荐

  1. ArcEngine中多边形内外环的处理(转)

    ArcEngine中多边形内外环的处理 原创 2012年09月06日 22:49:11 标签: object / null / 数据库 3462 Polylgon对象是由一个或多个Ring对象的有序集 ...

  2. ArcEngine实现多边形内部的挖洞操作

    在一般的数据编辑流程中,有些时候可能会涉及到多边形内部的挖洞操作.在ArcEngine中,一般可以通过两种方式实现挖洞操作.一种是叠置分析,这主要是针对图层与图层之间的操作,我会在后续的博客中进行介绍 ...

  3. 如何判断一个多边形的环是逆时针还是顺时针

    OGC关于数据格式有规定,多边形的外环应为逆时针,内环应为顺时针.GIS相关的库包,在对数据进行空间操作的时候,也基于这个规定,将数据标准化为外环逆时针,内环顺时针之后,再进行空间计算和分析. 这种标 ...

  4. 根据格林公式判断多边形顺时针和逆时针

    网上可以搜索到相关的论文和代码,但是实际测试发现代码不完整,在多边形比较复杂或者特殊的时候所得的结果不正确,发现原来是代码缺少了一条边导致的,只需要加上最后一条边即可. 以下是修改之后的完整代码: b ...

  5. Hunter’s Apprentice (猎人的学徒)——【Green 公式( 判断多边形边界曲线顺/逆时针】

    学习博客:https://www.cnblogs.com/kyokuhuang/p/4250526.html 伪代码: double d = 0; for (int i = 0; i < n - ...

  6. math: 判断两个向量之间夹角是逆时针或顺时针

    假设有两个二维向量 a . b,求向量a到向量b的角度是多少? 由向量夹角公式:cos<a,b>=(a.*b)/norm(a)/norm(b); 可得弧度: acos(cos<a,b ...

  7. 多边形的时针方向与法线方向

    从相反的法线方向观察,顺时针还是逆时针是相反的. 多边形的时针方向与法线方向的关系呈右手法则关系. GoogleEarth中的面具有时针方向,法线方向为正向,反之为负向 GoogleEarth的垂面在 ...

  8. 多边形或轮廓等距离外扩或收缩

    参考:多边形或轮廓等距离外扩或收缩_hjk61314的博客-CSDN博客_多边形外扩 1. 需求 已知:给定一个简单多边形,多边形按照顺时针或者逆时针的数组排列, 求:内部等距离缩小或者外部放大的多边 ...

  9. 计算机图形学6--讨论多边形

    文章目录 一.前言 二.多边形分类 三.识别凹多边形 四.分割凹多边形 4.1.向量法 4.2.旋转法 五.凸多边形分割成三角形集 5.1.内-外测试 一.前言 多边形:数学上定义为由三个或更多个称为 ...

最新文章

  1. FreeSWITCH在呼叫失败的情况下如何播放语音提示
  2. java语法基础(总结)
  3. 你以为的周末 vs 实际上的周末
  4. 我为什么看好中国的共享单车
  5. 描述linux目录结构以及目录结构命名规定
  6. Scala _01介绍安装使用
  7. 软件测试中需求分析谁去做的,软件项目在进入需求分析阶段,测试人员应该开始介入其中。 - 问答库...
  8. 成功驱动HD4600-Clover引导
  9. linux将db2账户添加到组_超实用的shell脚本--Linux安全加固设置,值得收藏
  10. 60-330-000-使用-窗口TopN分析与实现
  11. 自动驾驶算法-滤波器系列(五)——高级运动模型在UKF中的应用
  12. Java-BufferReader中的readLine()方法
  13. notepad++ 快捷键大全
  14. 就是要你懂Java中volatile关键字实现原理
  15. music的matlab程序,MUSIC算法matlab程序
  16. html 一轮多图轮播,通过html+css3实现图片轮播切换
  17. js渲染引擎 tempo.js
  18. 益聚星荣:海底捞要关300家店,火锅还有救吗?
  19. 2019届中国银联面试总结(内推上海岗,合肥面试)
  20. 2022年终Java编程技术总结

热门文章

  1. NLP到底现在在研究些什么?从ACL2023投稿领域及细分领域看一看
  2. Android APK 瘦身
  3. BAE 升级discuz x2.5 论坛安全问题的方式
  4. Android面试自我介绍
  5. VSCode使用便利贴
  6. FIR滤波器以及吉布斯效应
  7. 无心剑中译帕布罗·聂鲁达《今夜我能写》
  8. C#中判断字符串是否为数字的方法
  9. 北京博奥智源,浅谈图书馆的馆情展示系统细则
  10. uniapp 小程序订阅消息 一次订阅多个 wx.requestSubscribeMessage 微信小程序订阅消息