判断一个坐标点是否在不规则多边形内部的算法

原创 2016年08月29日 09:25:00

参考http://www.cnblogs.com/armyfai/p/3529243.html

1,将多边形的坐标存在在一个数组里,首先我们需要取得该数组在横坐标和纵坐标的最大值和最小值,根据这四个值minX,maxX,minY,maxY,算出一个四边形,判断目标点是否在这个四边形内,不满足,直接返回false,证明该目标点不在此多边形内部。

if(m_Pos.x < minX || m_Pos.x > maxX || m_Pos.y < minY || m_Pos.y > maxY)

{

return false;

}


2,然后,在多边形所规定的平面上,随便定义一个点,之后通过该点水平画一条线,数数这条横线和多边形的边相交多少次,看这条横线穿越多边形的次数是否为奇数,若为奇数,那么该目标点在多边形内,若为偶数,则在多边形外。


// vert 代表多边形有几个点,testx, testy 代表待测目标点的坐标,*vertx, *verty分别指向储存多边形横纵坐标数组的首地址

// 每次计算都涉及到相邻的两个点和待测试点,然后考虑两个问题:

// 1 被测试点的纵坐标是否在本次循环所测试的两个相邻点纵坐标范围之内?

// verty[i] < testy < vert[j] 或者 vert[j] < testy < vert[i]

// 2, 待测点是否在i,j两点之间的连线之下?

// 斜率公式,几何和不等式

// 然后每次这两个条件同时满足的时候我们把返回的布尔量取反。

int fun(int vert, float *vertx, float *verty, float testx, float testy) 
{
    int i, j, c = 0;
    for (i = 0, j = vert-1; i < vert; j = i++)
	{
        if ( ( (verty[i]>testy) != (verty[j]>testy) ) &&
			(testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) )
            c = !c;
    }
    return c;
}





版权声明:本文为博主原创文章,未经博主允许不得转载。

[几何]判断点是否在不规则多边形内

最近项目用到在Google map上判断事发地点,是否在管辖区域内。典型的判断一个点是否在不规则多边形内的例子。 但是Google map没有提供相应的api,找资料发现百度地图提供了,肿么办,为了一...
  • shao941122
  • shao941122
  • 2016年05月26日 09:55
  • 4311

判断一个点是否在多边形区域内

在做LBS,POI相关项目时,经常需要判断一个点是否在某个区域中的问题。在实际场景中,这个区域肯定是没有任何规律的不规则形状。针对这种场景,搜索了几种对应的解法。重点是,最后给大家奉上能工作的源码!有...
  • bitcarmanlee
  • bitcarmanlee
  • 2017年03月06日 19:58
  • 2369

点在多边形内算法——判断一个点是否在一个复杂多边形的内部

新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形内最短路径页(shortest-path-through-polygonpage)! 图 1 图1显示了一个具...
  • hjh2005
  • hjh2005
  • 2013年07月04日 21:55
  • 67073

判断点是否处于多边形内的三种方法

 1. 叉乘判别法(只适用于凸多边形) 想象一个凸多边形,其每一个边都将整个2D屏幕划分成为左右两边,连接每一边的第一个端点和要测试的点得到一个矢量v,将两个2维矢量扩展成3维的,然后将该边与...
  • huixingshao
  • huixingshao
  • 2014年11月06日 12:56
  • 3683

判断点是否在一个任意多边形内几种方法

首先,作为任意多边形,想要进行数学计算,都要将其分解为简单的三角形,且多边形分为凸多边形和凹多边形,首先要区分这两种多边形。否则,在连线过程中如果是凹多边形则会连接到多边形以外的区域。 首先我们不...
  • zhzzha
  • zhzzha
  • 2015年12月11日 18:46
  • 1234

判断点在任意多边形内部最简单的算法

新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形内最短路径页(shortest-path-through-polygonpage)! 图 1 图1...
  • jjj19891128
  • jjj19891128
  • 2014年03月31日 18:11
  • 4155

判断一个点是否在多边形内部

一、比如说,我就随便涂了一个多边形和一个点,现在我要给出一种通用的方法来判断这个点是不是在多边形内部(别告诉我用肉眼观察……)。 首先想到的一个解法是从这个点做一条射线,计算它跟多边形边...
  • u010397246
  • u010397246
  • 2015年04月10日 16:23
  • 4162

如何判断一个点是否在多边形内?

在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题。乍听起来还挺复杂。根据W. Randolph Franklin 提出的PNPoly算法,只需区区几行代码就解决了这个问...
  • u011722133
  • u011722133
  • 2016年10月14日 10:03
  • 4174

【C/C++学习笔记】判断一个点是否在多边形内部的例子

/* 原理: 将测试点的Y坐标与多边形的每一个点进行比较, ** 会得到测试点所在的行与多边形边的所有交点。 ** 如果测试点的两边点的个数都是奇数个, ** 则该测试点在多边形内,否则在多边形...
  • TMT123421
  • TMT123421
  • 2015年11月03日 17:19
  • 2046

判断点是否在多边形内部

如何判断一个点是否在多边形内部? (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。 (2)夹角和判别法:判断目标点与所有边的夹角和是否...
  • qq_16072507
  • qq_16072507
  • 2015年11月05日 15:57
  • 1186
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断一个坐标点是否在不规则多边形内部的算法
举报原因:
原因补充:

(最多只允许输入30个字)