判断某个点是否在不规则图形内
输入:一些点的坐标;一个测试点
输出:是否在多边形内部
思路:
(1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。
(2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。
(3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。
具体做法:将测试点的Y坐标与多边形的每一个点进行比较,会得到一个测试点所在的行与多边形边的交点的列表。在下图的这个例子中有8条边与测试点所在的行相交,而有6条边没有相交。如果测试点的两边点的个数都是奇数个则该测试点在多边形内,否则在多边形外。在这个例子中测试点的左边有5个交点,右边有三个交点,它们都是奇数,所以点在多边形内。
算法图解:
想法:
1、先求出这些点中的横纵坐标的最大值和最小值,判断测试点是否在内部,若不在,则直接排除掉,返回false;
if(p.x<minx || p.x>maxx || p.y<miny ||p.y>maxy)
{
return false;
}
2、核心部分:
循环每一个边;
被测试点纵坐标testy是否在相邻两点纵坐标之内?
待测点testx是否在两点连线下方,若是,则记录一次,说明延长线上有一个交点。
最后判断记录次数为奇数,则在多边形内部。
1 int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy) 2 { 3 int i, j, c = 0; 4 for (i = 0, j = nvert-1; i < nvert; j = i++) 5 { 6 if ( ((verty[i]>testy) != (verty[j]>testy)) && 7 (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) 8 c = !c; 9 } 10 return c; 11 }
View Code
转载于:https://www.cnblogs.com/s-c-x/p/10698687.html
判断某个点是否在不规则图形内相关推荐
- 点在不规则图形内算法python_判断某个点是否在不规则图形内
输入:一些点的坐标:一个测试点 输出:是否在多边形内部 思路: (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部. (2)夹角和判别法:判断目标点与 ...
- 点在不规则图形内算法python_目标检测算法中规则矩形和不规则四边形IOU的Python实现...
交并比(Intersection-over-Union,IoU),目标检测中使用的一个概念,我们在进行目标检测算法测试时,重要的指标,是产生的预测框(candidate bound)与标记框(grou ...
- canvas绘制不规则图形,点击获取当前图形索引
canvas给不规则图形添加点击事件 有这么一个需求,把传过来的四个坐标,连成一个图形(可能是规则的,也可能是不规则的),点击某个图形,显示当前这个图形的信息 //数据格式 dataList: {lo ...
- 判断一个点是否在某个区域内(多边形)
判断一个点是否在某个区域内(多边形) 背景: 比如滴滴会根据乘客所在的不同区域,给出不同的价格.市区堵一点,那么价格也高点.获取服务范围只规定在某个范围内 原理: 求解从该点向右发出的水平线射线与多边 ...
- css绘制不规则图形
CSS绘制不规则图形 在实际开发中,经常会遇到绘制图形(图标)的需求,比如:箭头图表.不规则图形.规则图形: 常见方法 对于图形的实现,可以大体上分为几种做法 (1) 背景图片,请UI小姐姐帮你吧-- ...
- Unity 不规则图形点击
分享一个项目中用的着的小功能(Unity不规则图形点击) 在使用UGUI组件时,`通常会遇到一下不规则图形点击.如图 现有的UGUI Button时间没办法处理重叠部分的点击事件.所以查了下资料,利用 ...
- 使用CSS 3创建不规则图形
2019独角兽企业重金招聘Python工程师标准>>> 前言 CSS 创建复杂图形的技术即将会被广泛支持,并且应用到实际项目中.本篇文章的目的是为大家开启它的冰山一角.我希望这篇文章 ...
- css 对话框阴影,科技常识:css实现不规则图形的阴影(如对话框)
今天小编跟大家讲解下有关css实现不规则图形的阴影(如对话框) ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关css实现不规则图形的阴影(如对话框) 的相关资料,希望小伙伴们看了有所帮助. ...
- 地图处理方法-判断一个点是否在某个区域内
判断一个点是否在某个区域内(多边形) 背景: 比如滴滴会根据乘客所在的不同区域,给出不同的价格.市区堵一点,那么价格也高点.获取服务范围只规定在某个范围内 原理: 求解从该点向右发出的水平线射线与多边 ...
最新文章
- PHP网站首页打不开的原因讲起
- 敏捷过程、极限编程和SCRUM的关系
- AtCoder AGC031E Snuke the Phantom Thief (费用流)
- iOS拓展---碰到奇葩需求
- python 3.6.0新语法_详解Python3.6正式版新特性
- .NET Core使用NLog通过Kafka实现日志收集
- P1912-[NOI2009]诗人小G【四边形不等式,单调队列】
- linux内核4.4和4.5,[图]Linux Kernel 4.5系列第4个维护版本发布
- 基于visual Studio2013解决面试题之0307最后谁剩下
- bzoj 1685: [Usaco2005 Oct]Allowance 津贴(贪心)
- 新手的神奇bug——ImportError: cannot import name XXX
- 华为计算机系统叫什么,华为MateBook操作系统是什么
- 用tableau绘制地图
- java取北京时间_在java中怎么获取北京时间
- OS学习笔记-4(清华大学慕课)mooc实验一
- 化工集团如何制定数字化转型策略
- Python求水仙花数代码
- (三)对图像进行Gauss高斯平滑处理
- linux 行首加特定字符_【Linux】行首、行尾添加字符串
- nnunet 扩充流程
热门文章
- 基于DSP的数字振荡器C语言编程,基于DSP的数字振荡器的设计与实现.pdf
- git commit -amend_最常见的Git错误都有哪些,如何解决它们?
- 好用的 php类,一个好用的php文件上传处理类
- 黑群晖docker清理缓存_群晖NAS后台容量查询及文件删除(附download station缓存删除方法)...
- 解释上采样和PixelShuffle
- 【深度学习模型的训练与评估】一个实例:Iris多分类
- 【Web安全】DVWA+CSRF跨站请求伪造-生成链接修改password
- python【蓝桥杯vip练习题库】BASIC-5查找整数
- Python应用matplotlib绘图简介
- 算法提高 邮票面值设计