如何判断一个地图点是否在一个java判断地图区域距离内

&判断一个点是否在一个多边形里&,一开始以为是个挺难的问题,但Google了一下之后发现其实蛮简单,所用到的算法叫做&Ray-casting Algorithm&,中文应该叫&光线投射算法&,这是维基百科的描述:[]
简单地说可以这么判断:从这个点引出一根&射线&,与多边形的任意若干条边相交,累计相交的边的数目,如果是奇数,那么点就在多边形内,否则点就在多边形外。
如图,A点引一条射线,与多边形3条边相交,奇数,所以A点在多边形内,而从B点引一条射线,与多边形的2条边相交,偶数,所以B点在多边形外。
我打算把这个算法用于判断地图上所在的位置是否在一个范围之内,我先用鼠标在地图上绘制出一个多边形区域,然后再用这个方法判断一个坐标是否在这个多边形范围内,我仍然拿五角星做试验品,在高德地图上描出一个五角星:
嗯?怎么五角星居然中间没被镂空?这是怎么回事?经过研究,我发现高德地图的鼠标工具的多边形填充用的是另外一套规则,叫做&None Zero Mode&,判断一个点是否在多边形内的规则就变成了:从这个点引出一根&射线&,与多边形的任意若干条边相交,计数初始化为0,若相交处被多边形的边从左到右切过,计数+1,若相交处被多边形的边从右到左切过,计数-1,最后检查计数,如果是0,点在多边形外,如果非0,点在多边形内。回到五角星的例子,这次要注意多边形线条描绘的方向:
从C点引出一条射线,与这条射线相交的两条多边形的边均是从左向右切过,总计数是2,因此C点在多边形内。用个更形象点的方式描述就是:从C点出发,一直朝一个方向走,遇到两条单行道,都是从自己的左边切至右边的方向,计数+1,计数+1,总计数所以是2。
算法实现起来居然很简单,几行代码即可,真的是几行代码,我用的是C#,大家可以轻轻松松改成别的。
public static class RayCastingAlgorithm {
public static bool IsWithin(Point pt, IList&Point& polygon, bool noneZeroMode) {
int ptNum = polygon.Count();
if (ptNum & 3) {
return false;
int j = ptNum - 1;
bool oddNodes = false;
int zeroState = 0;
for (int k = 0; k & ptN k++) {
Point ptK = polygon[k];
Point ptJ = polygon[j];
if (((ptK.Y & pt.Y) != (ptJ.Y & pt.Y)) && (pt.X & (ptJ.X - ptK.X) * (pt.Y - ptK.Y) / (ptJ.Y - ptK.Y) + ptK.X)) {
oddNodes = !oddN
if (ptK.Y & ptJ.Y) {
zeroState++;
zeroState--;
return noneZeroMode?zeroState!=0:oddN
我用WPF写了个demo,如图:
给懒得敲打吗的同学玩玩。()
阅读(...) 评论()大漠插件找图的相对坐标是怎么确定的,比如在屏幕的一小区域内找图 _ 综合讨论 - 按键精灵论坛
腾讯微博:
软件版本:2014.05软件大小:76.8M更新时间:2-21
软件版本:3.2.5软件大小:62.5M更新时间:06-06
软件版本:1.2.7软件大小:29.2M更新时间:06-19
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 2884|回复: 4
按键精灵开发者4级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
dm_=FindPic 54,53,140,90,"1.bmp",0.9,intX,intY两个坐标x,y我能确定,现在四个坐标意味着可以在指定的小区域内找图,知道其中的好处,但是不知道怎么确定这几个坐标,有没有工具或者方法确定的,还有一个问题,绑定窗口后,窗口的相对坐标是怎么算得
希望大叔大姐能不吝啬指导我 谢谢
按键精灵开发者3级可通过提升认证等级来升级勋章:
按键精灵的抓抓可以找到任意点的坐标啊
新手求交流,求指点
有一起学习的请Q我!
按键精灵开发者4级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
suliu331 发表于
22:44按键精灵的抓抓可以找到任意点的坐标啊这是找图,在指定的区域内找图
&img src=&/static/image/smiley/yct/yct_26.gif& onload=&thumbImg(this)& alt=&& /&&&&font color=&Olive&&&strong&如果回答有帮助记得给花花&/strong&&/font&
按键精灵开发者3级可通过提升认证等级来升级勋章:
晕,你找到你那图的左上角的点坐标和右下角的坐标就不可以指定区域找图了?左上角的点坐标和右下角点坐标都可以抓抓找出啊,然后在找图里填上这两个点的坐标就可以了
新手求交流,求指点
有一起学习的请Q我!
按键精灵开发者6级可通过提升认证等级来升级勋章:学有所成学有所成勋章,新手步入按键学堂的第一枚勋章
或许是绑定了指定窗口才造成的疑惑吧全屏当然好办……扫二维码下载作业帮
2亿+学生的选择
下载作业帮安装包
扫二维码下载作业帮
2亿+学生的选择
怎样判断一个图能否一笔画可以从那几个方面考虑?
zlKF77QU50
扫二维码下载作业帮
2亿+学生的选择
从奇偶点的个数来考虑!一笔画问题中所涉及的图形都是封闭图形:当奇数点有0个或2个时能一笔画完成;当奇数点个数多于2个时,则一笔画不能完成.(1)当奇数点为0个时,比如阿拉伯数字中的"8",只有中间一个偶数点,因为中间的交点处向外发出的线是偶数条",却没有奇数点,这样的图形可以从图上的任意一个地方开始一笔画即可完成;(2)当奇数点有2个时,比如"带一条对角线的正方形",奇数点为对角线与正方形的两个交点,因为从那两个点发出的是奇数条线.这样的图形必须从其中一个"奇数点"开始画起,方能一笔画完成.注:若奇数点有2n个(n>1),则至少需要n笔画完成.
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 判断点是否在区域内 的文章

 

随机推荐