“角度和法”的思路是:多边形内的点,与所有顶点顺次连接形成向量的夹角之和为2π。
图例说明,如下图所示:

O点在多边形之内,其与多边形所有顶点的连线,组成6个向量,顺次形成6个向量夹角,显而易见,这6个夹角之和为2π。

P点在多边形之外,其与多边形所有顶点的连线,组成6个向量,顺次形成6个向量夹角,显而易见,这6个夹角之和不等于2π。确切的说是小于2π。
计算夹角的方法可按如下公式实现:

θ=arccos(ab∥a∥∥b∥)

\theta {\rm{ = }}\arccos \left( {\frac{{ab}}{{\left\| a \right\|\left\| b \right\|}}} \right)
公式中,a和b就是组成夹角的两个向量,在反余弦函数括号中,分子部分为两个向量的点乘,分子部分为两个向量各自的2范数相乘。在这里要说明一下,如果要判断的点就是多边形顶点之一,则a和b其中之一的2范数为0,需要特别处理;如果点在多边形的边上,则有存在一个夹角为π的情况。这两种情况均可以认为该点在多边形的边上。
此方法和之前谈到的向量积法、面积法一样,可以直接适用于凸多边形,至于凹多边形,也可以用,不过要将凹的部分可能重复计算夹角的地方调整坐标在集合中的顺序后计算夹角。另外一个问题和面积法相似,就是计算角度存在一定的舍入误差,影响计算的精度。
参考代码:

int InPolygon_Angle(const CZPolygon& polygon, CZPoint_t pt){int itNumPt = polygon.size();CZPoint_t pt_1, pt_2;double duAngleAll = 0.0;for (int i = 0; i < (itNumPt - 1); i++) {pt_1 = polygon[i];pt_2 = polygon[i + 1];double duA = Angle(&pt, &pt_1, &pt_2);if ((NOANGLE == duA) || (ABS(duA - PI) < EPS))return ONSIDE;duAngleAll += duA;}return ABS(duAngleAll - 2*PI)<EPS ? INSIDE : OUTSIDE;
}

效果和博客http://blog.csdn.net/ezhchai/article/details/78864336一样,这里就不再重复贴了。

判断点与多边形的关系(3):角度和法相关推荐

  1. 辐角原理判断点和多边形的关系

    辐角判断点和多边形的关系 一.辐角原理 二.适用条件 三.算法效果 四.matlab代码实现 \qquad标题写的多边形,然而在现实情况中多边形只是该问题的一个子集:我们先讲点和连通域的关系,点和多边 ...

  2. 判断点与多边形的关系(1):向量积法

    判断点与多边形的关系,是计算几何的经典问题,点与多边形的关系可以分为:点在多边形内(inside).点在多边形外(outside)以及点在多边形的边上(onside)三种. 在图像处理系统中,如果通过 ...

  3. Python矩形和圆的关系,矩形和多边形的关系

    目录 一.基本思路 二.矩形和圆的关系 验证思路 三.矩形和多边形的关系 验证思路: 一.基本思路 本文主要处理的是相交和不相交,因为地理数据保存较多,需要运用最小外接矩阵 1.根据radius_2_ ...

  4. 判断点集与多边形的位置关系

    判断点集与多边形的位置关系 点集与凸多边形 点集与一般性多边形 点集与凸多边形 点集或者是点与多边形位置关系无非就三种 点在多边形的内部 点在多边形的外部 点在多边形上 一般如果该多边形是凸的那么我们 ...

  5. egret判断两个多边形是否相交(分离轴定律)

    参考原文:原文 预备知识:向量的点积:  关于向量的知识这里不再赘述 分离轴定理(Separating Axis Theorem) 概念:通过判断任意两个 凸多边形 在任意角度下的投影是否均存在重叠, ...

  6. OpenCV + CPP 系列(廿九)点与多边形的关系

    文章目录 一.简介 二.效果演示 一.简介 比较常见的判断点与多边形关系的算法有射线法.面积法.点线判断法和弧长法等,算法复杂度都为O(n),不过只有射线法可以正确用于凹多边形,其他3个只可以用于凸多 ...

  7. php之判断点在多边形内的api

    1.判断点在多边形内的数学思想:以那个点为顶点,作任意单向射线,如果它与多边形交点个数为奇数个,那么那个点在多边形内,相关公式: <?php class AreaApi{//$area是一个多边 ...

  8. Java判断类和实例的关系

    欢迎支持笔者新作:<深入理解Kafka:核心设计与实践原理>和<RabbitMQ实战指南>,同时欢迎关注笔者的微信公众号:朱小厮的博客. 欢迎跳转到本文的原文链接:https: ...

  9. 判断点在多边形内外的简单算法

    发信人: RovingCloud (寻找当年的OI感觉), 信区: ACMICPC 标  题: [原创]惊喜发现判断点在多边形内外的超简单算法 发信站: 逸仙时空 Yat-sen Channel (W ...

最新文章

  1. 构建node.js基础镜像_在Android上构建Node.js应用程序
  2. android启动程序唤起其它app,安卓和rn唤起其他app应用
  3. 微信小程序--搭建linux服务器并部署java后端程序2021
  4. [日推荐]『车价天天报』省钱买好车
  5. 关于报错stale element reference: element is not attach
  6. weblogic ssrf漏洞复现
  7. [loj6391][THUPC2018]淘米神的树(Tommy)
  8. svn打分支与分支合并回主干
  9. ORACLE 数据库的级联查询 一句sql搞定(部门多级)
  10. java如何将json转换为数组_如何将JSON数组转换为普通Java数组?
  11. 安卓默认下载工具_安卓 | 希音音乐 一款炒鸡好用的无损音乐下载器
  12. 20191124_射雕侠侣和天龙八部小说分类
  13. 百度 嵌入式Linux软件研发工程师面试记录
  14. 领英给好友群发消息的方法和细节
  15. 模拟扑克牌花色:♠ ♥ ♦ ♣ * 牌号:A 2 3 4 5 6 7 8 9 10 J Q K * 大王、小王 * * 1.生成一副牌 * 2.然后发牌
  16. 触动人心的手机端页面设计
  17. 计组实验3 mips冒险之流水线冒险
  18. 扫码点餐外卖配送小程序开发功能
  19. 春暖花开,共迎未来:开源社顾问委员会第一季度会议顺利召开~
  20. 8.字符串转整数(String to Integer)

热门文章

  1. 编译Android7.0.1系统时,一般的电脑内存不足的解决办法
  2. CentOS7关闭Swap分区
  3. JavaWeb——Spring 的操作数据库的 DAO模式
  4. 批量导出VSD文件到JPG文件 宏
  5. import : 无法将“import”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径 正确,然后再试一次。
  6. find命令中参数perm的用法
  7. Window与WindowManager
  8. 为什么“时间管理四象限”没有用处?
  9. 象棋联机java代码_中国象棋源代码Java程序
  10. HTML表单事件,获取焦点时、失去焦点时、即将获取焦点时、即将失去焦点时、输入值时、选取文本时、表单元素的内容改变时、提交时....