判断点是否在多边形区域里面
2016-08-09 15:48
381 查看
英语原文:https://www.ecse.rpi.edu/~wrf/Research/Short_Notes/pnpoly.html
基本思想是,以该点向任意方向(这里是x轴正向)作射线,若与多边形的交点个数为偶数,则在多边形之外,否则在多边形之内。
这是作者给出的源代码:
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; 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;
}
初看还比较难理解。
nvert表示多边形点的个数,*vertx表示多边形点的x轴数组,*verty表示多边形点的y轴数组,testx和testy分别表示测试点的x、y轴。
对于i=0, j = nvert-1; i<nvert; j=i++的解释
这句话的意思是遍历一遍多边形的两个相邻点j, i。j在i之前。当i为0时,j为i的前一个点,即nvert-1。
对于(verty[i]>testy) != (verty[j]>testy)的解释
这句话表示点i和j必须在测试点y值的两侧。这里处理非常巧妙,而且防止了测试点、多边形相邻点在同一直线上,防止了后半部分条件中除数为0
对于testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]的解释
这句话利用了直线的两点式。
基本思想是,以该点向任意方向(这里是x轴正向)作射线,若与多边形的交点个数为偶数,则在多边形之外,否则在多边形之内。
这是作者给出的源代码:
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy)
{
int i, j, c = 0;
for (i = 0, j = nvert-1; i < nvert; 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;
}
初看还比较难理解。
nvert表示多边形点的个数,*vertx表示多边形点的x轴数组,*verty表示多边形点的y轴数组,testx和testy分别表示测试点的x、y轴。
对于i=0, j = nvert-1; i<nvert; j=i++的解释
这句话的意思是遍历一遍多边形的两个相邻点j, i。j在i之前。当i为0时,j为i的前一个点,即nvert-1。
对于(verty[i]>testy) != (verty[j]>testy)的解释
这句话表示点i和j必须在测试点y值的两侧。这里处理非常巧妙,而且防止了测试点、多边形相邻点在同一直线上,防止了后半部分条件中除数为0
对于testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]的解释
这句话利用了直线的两点式。
相关文章推荐
- 百度地图 判断一个标注点是否在多边形区域里
- 判断一个点是否在多边形区域内
- Java类判断百度地图上某点是否在多边形区域内
- 判断点是否在多边形里面:CodeForces - 659D Bicycle Race
- Java 判断一个点是否在多边形区域内【转】
- js判断一个地图标注点是否在多边形区域里
- 判断一个点是否在多边形区域内
- php结合mongodb判断坐标是否在指定多边形区域内的实例
- PostGis 如何判断两个多边形是否有重叠的区域
- 百度地图API(3):判断地图上的点是否在 圆形 多边形 区域内
- 百度地图 判断一个标注点是否在多边形区域里
- c# 判断点是否在区域内点在区域内在多边形内判断
- c# 判断点是否在区域内 点在区域内 在多边形内 判断
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
- mongodb 判断坐标是否在指定多边形区域内的方法
- Java 判断一个点是否在多边形区域内
- Qt判断点是否在多边形区域中
- mongodb 判断坐标是否在指定多边形区域内的方法
- java/c# 判断点是否在多边形区域内
- JS - 百度地图 判断一个标注点是否在多边形区域里