社区
C++ 语言
帖子详情
如何判断一个点是否在一个区域内(不规则区域),谢谢大家
huheng_0_0
2006-01-10 10:34:53
如题,另外,除了用射线法之外,还有什么别的更好的方法吗,无论什么方法,最好有代码,谢谢各位高手了!!
...全文
3588
14
打赏
收藏
如何判断一个点是否在一个区域内(不规则区域),谢谢大家
如题,另外,除了用射线法之外,还有什么别的更好的方法吗,无论什么方法,最好有代码,谢谢各位高手了!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
iamcaicainiao
2006-01-17
打赏
举报
回复
非常抱歉 哦。判断点是否在polygon里,确实gis是有函数的。因为曾经用过。
但是我确实8记得具体函数名了。因为。
我8做GIS好多年。
逸学堂
2006-01-13
打赏
举报
回复
2
描点法,
把不规则区域着色,然后取得要判断点的色素就可以判断是否在不规则区域了1
Mr_Yang
2006-01-11
打赏
举报
回复
以点P为端点,向左方作射线L,由于多边形是有界的,所以射线L的左端一定在多边形外,考虑沿着L从无穷远处开始自左向右移动,遇到和多边形的第一个交点的时候,进入到了多边形的内部,遇到第二个交点的时候,离开了多边形,……所以很容易看出当L和多边形的交点数目C是奇数的时候,P在多边形内,是偶数的话P在多边形外。如图2(a),(b)所示。
但是有些特殊情况要加以考虑,如图2(c) (d) (e) (f)所示。在图2的(c) 中,L和多边形的顶点相交,这时候交点只能计算一个;在图2 (d) 中,L和多边形顶点的交点不应被计算;在图2 (e) 和 (f) 中,L和多边形的一条边重合,这条边应该被忽略不计。为了统一起见,我们在计算射线L和多边形的交点的时候,1。对于多边形的水平边不作考虑;2。对于多边形的顶点和L相交的情况,如果该顶点是其所属的边上纵坐标较大的顶点,则计数,否则忽略;3。对于P在多边形边上的情形,直接可判断P属于多边行。由此得出算法的伪代码如下:
count = 0;
以P为端点,作从右向左的射线L;
for ( 多边形的每条边side ) {
if ( P 在边 side 上 ) return true;
if ( side 是水平的 ) continue;
if ( side 的一个端点在L上且该端点是side两端点中纵坐标较大的端点 ) {
count++;
} else if ( side 和 L 相交 ) {
count++;
}
}
return ( count % 2 == 1 );
该算法的复杂度为O(n)。
iamcaicainiao
2006-01-11
打赏
举报
回复
好像关于polyline和polygon这东西,有判断点是否在polygon里的函数的吧,调用它就行了。我做gis的时候,直接调用gis里的函数进行二次开发的。有函数的。
huheng_0_0
2006-01-11
打赏
举报
回复
楼上的,谢谢你提供的好想法,但是这个方法在实现上有点困难,首先这个不规则图形是一个AUTO CAD里面的polyline,它的顶点可能很多(好几百个,将近千个是正常情况),而且得到的顶点数组据我估计(猜的)可能是按map映射规则存储的,所以数组上相邻的两点并不是实际图上相邻的两点,他们是无序的,所以比面积这个,以我的水平实现不了啊,如有什么错误,请指正。
huheng_0_0
2006-01-11
打赏
举报
回复
回复人: iamcaicainiao(菜菜鸟) ( ) 信誉:95
好像关于polyline和polygon这东西,有判断点是否在polygon里的函数的吧,调用它就行了。我做gis的时候,直接调用gis里的函数进行二次开发的。有函数的。
--------------------------------------------------------------------------------
敢问一句,函数名是什么啊?我在ARX中没有找到~
另外说一句,射线法理论上没问题,但是我们实现的时候会出现误差,由于精度的问题,本来应该只有两个交点,却产生了3个交点,这样就导致明明是在外部的点,却算在内部了(可能性很小,但是不幸的是在进行大量数据测试的时候发现了这么一个点)
lujun-cc
2006-01-11
打赏
举报
回复
唉,不好意思,没看清楼主的要求!
lujun-cc
2006-01-11
打赏
举报
回复
从点任做一条射线,穿过多边形的边数为偶数,则在区域外,为奇数,则在区域内!
不过要注意点在多边形变数的情况!
vollin
2006-01-10
打赏
举报
回复
回复人: happyparrot(快乐鹦鹉) ( ) 信誉:100 2006-01-10 10:52:00 得分: 0
将不规则区域转换为CRgn对象。然后用PtInRegion函数就可以判断了。
强!
fierygnu
2006-01-10
打赏
举报
回复
只用过射线法 :(
chengzanmiao
2006-01-10
打赏
举报
回复
不规则的就是用点到各个边的距离和来判断,大于不规则图形面积就是在外,等于在边上和内部.
快乐鹦鹉
2006-01-10
打赏
举报
回复
将不规则区域转换为CRgn对象。然后用PtInRegion函数就可以判断了。
青蛙王子
2006-01-10
打赏
举报
回复
数学方法,有公式
青蛙王子
2006-01-10
打赏
举报
回复
聪明,我自叹不如
python
判断
某个坐标
是否
在规定范围内
最近在项目上处理异常数据的时候,有个需求是根据转换后每组数据的两个数组成
一个
坐标,判定这个坐标
是否
在合理的范围内,这个范围通过matplotlib绘制出来,是
一个
不规则
的多边形。 百度看了一堆由大神们写的一些算法,对新手来说还是不够友好。下面是总结了两个非常好用的api文档,希望对大家有所帮助。 通过matplotlib.path
判断
直接上代码 from matplotlib.path import Path # 构造
一个
矩形多边形进行测试 p = Path([(0, 0), (0, 1), (1, 1
cesium
判断
点
是否
在 矩形内部
// 获取标注点数据 viewer.mars.centerAt({y: 31.772337,x: 117.213784,z: 12450.23,heading: 359.5,pitch: -65.6,roll: 0},0); var e = mars3d.point.getExtent(viewer); $.ajax({ url: "http://data.marsgis.cn/mars_...
根据经纬度
判断
当前位置
是否
在多边形
区域
内
先在地图上找几个坐标点,让其形成
一个
多边形 public class Location { // static String partitionLocation=“112.309142_30.283303,112.28643_30.296151,112.279854_30.302044,112.25966_30.306971,112.244209_30.31941,112.23429_30.334...
processing
判断
一个
点
(鼠标事件)
是否
在三角形、圆、椭圆、矩形内之第二章(超详细鼠标交互)
本文主要讲解了从椭圆的定义及表达式多重入手
判断
一个
点
是否
在椭圆内部,再结合processing编程编写
判断
程序,并且列出了processing如何画椭圆、圆、三角形、矩形的多种方法,图文并茂,
matlab在
不规则
区域
插值,插值 – 如何在两组
不规则
数据之间插入点?
好主人,我终于明白了.这是最终结果:美丽!但它做了很多工作.我的代码太粗糙,而且对我的项目来说太具体了,对其他任何人都没用.但这是潜在的逻辑.您必须有两组数据才能进行插值.我将这些称为“外部”曲线和“内部”曲线.假设“外部”曲线完全包围“内部”曲线,而不与“内部”曲线相交.曲线实际上只是X,Y数据的集合,并且对应于定义为Z的一组值.在此处使用的示例中,“外部”曲线对应于Z = 50并且“内部”曲线...
C++ 语言
65,189
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章