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

以下是修改之后的完整代码:

bool IsPolyClockwise(std::vector<point2d>& vPts)
{//沿着多边形的边求曲线积分,若积分为正,则是沿着边界曲线正方向(逆时针),反之为顺时针double d = 0;const size_t nSize = vPts.size();for (int i = 0; i < nSize - 1; ++i){d += -0.5 * (vPts[i + 1].y + vPts[i].y)*(vPts[i + 1].x - vPts[i].x);}//这条边不能忘记d += -0.5 * (vPts[0].y + vPts[nSize - 1].y)*(vPts[0].x - vPts[nSize - 1].x);//小于零为顺时针,大于零为逆时针return d < 0.0;;
}

感谢原作者的分享和参考。

根据格林公式判断多边形顺时针和逆时针相关推荐

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

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

  2. 判断多边形边界曲线顺/逆时针

    Green公式 double d = 0; for (int i = 0; i < n - 1; i++) {d += -0.5 * ( y[i + 1] + y[i]) * (x[i + 1] ...

  3. js判断多边形的坐标点是顺时针还是逆时针的两种方法

    js判断多边形的坐标点是顺时针还是逆时针的两种方法 关键算法 通过极值点与其相邻点的构成的矢量走向算出多边形走向 通过计算各左边点所在矢量夹角的角度总和来推算多边形走向 由于arcgis对顺时针生成的 ...

  4. 向量叉乘判断两向量之间是顺时针还是逆时针

    转自http://blog.163.com/shiliping_007/blog/static/25772011201071744031933/ 向量积 a x b = (^n) * |a| * |b ...

  5. 判断两个平面向量之间夹角是顺时针还是逆时针

    判断两个向量之间夹角是顺时针还是逆时针 利用平面向量的叉乘 a = (x1,y1) b = (x2,y2) a×b = x1y2 - x2y1 若结果为正,则向量b在a的逆时针方向 否则,b在a的顺时 ...

  6. 如何顺时针或者逆时针记录多边形的每个点

    问题定义: 按照顺时针或者逆时针提取多边形的各个顶点 问题解决: 针对一个凸多边形,假设多边形的中心为C,多边形的任意一个顶点为A 做一个辅助点,假设有一条水平线通过中心点C,并在c点右边设一个B点 ...

  7. 两个向量顺时针还是逆时针判断

    转自 判断两个平面向量之间夹角是顺时针还是逆时针 断两个向量之间夹角是顺时针还是逆时针 利用平面向量的叉乘 a = (x1,y1) b = (x2,y2) a×b = x1y2 - x2y1 若结果为 ...

  8. 如何判断某个物体当前是顺时针还是逆时针旋转

    #region[来自某位道友的求助]Vector3 _scale;int zero = 0;void Awake(){_scale = transform.localEulerAngles;}priv ...

  9. 面积法判断多边形顺逆时针

    面积法判断多边形顺逆时针 // 输入:按照顺序输入多边形的轮廓顶点 // 输出:0代表数据有问题,-1代表逆时针,1代表顺时针 int estimateContourType(std::vector& ...

最新文章

  1. android test.apk,app-debug.apk和app-debug-androidTest.apk在安装macaca-android模块的时候build失败...
  2. SpringBoot整合Mybatis-Plus分页失效,Mybatis-Plus 3.4.1分页插件失效踩坑
  3. 常用计算机服务,常用计算机端口对应的服务(The commonly used computer port corresponding service).doc...
  4. 配置exchange 2010高可用群集服务(dag)
  5. jfinal使用shiro注解大体流程
  6. 前端学习(1306):node.js模块的加载机制
  7. java 根据类名示例化类_Java即时类| plusMillis()方法与示例
  8. 在java中null的作用_在java中避免使用!= null有什么好处?
  9. mysql检查存在_如何检查MySQL中是否存在行?(即检查MySQL中是否存在电子邮件)...
  10. 疯狂ios讲义疯狂连载之图像控件(UIImageView)
  11. 程序入口地址的直接定制表【 (1) 清屏(2) 设置前景色 (3) 设置背景色 (4) 向上滚动一行】...
  12. html武侠文字游戏源码,执剑行!最新武侠文字mud游戏
  13. oracle临时表空间追加文件,Oracle临时表空间查看、添加临时表空间数据文件、修改默认临时表空间 方法!...
  14. 贪心算法-完全背包问题
  15. ThinkPHP5.0 查询条件where()使用
  16. 数据结构知识清单简要
  17. Stata实现结构方程模型
  18. 地图坐标转换(84坐标、百度坐标、国测局坐标)
  19. windows基于TCP/IP的简单文件/图片传输
  20. 励志视频,他没有手脚但是很幸福,不要抱怨

热门文章

  1. java代码实现amr格式转换为mp3格式
  2. C语言实现快速排序(三种)
  3. 服务器系统版本,2018 年 4 月 17 日 - KB4093120(操作系统内部版本 14393.2214)
  4. 为了保证观影效果,窗帘都被拉上了,缺少空气流动
  5. 1.1.5 蚂蚁。一根长度为L厘米的木棍上有n只蚂蚁,每只蚂蚁要么朝左爬,要么朝右爬,速度为1厘米/秒。
  6. 浏览器因为代理打不开
  7. intro.min.js_使用Intro.js构建分步指南[教程]
  8. Asp.Net Core由零开始(七)———Action Result
  9. codeforce能用万能头文件吗_iOS攻防(四):使用Dumpdecrypted 砸壳 class-dump 导出头文件...
  10. 若依访问上传头像404