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

原创 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;
}





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

相关文章推荐

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

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

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

转自:http://blog.csdn.net/hjh2005/article/details/9246967 新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形...

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

新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多边形内最短路径页(shortest-path-through-polygonpage)! 图 1 图1...

判断点是否在多边形内

有一个n边形,顶点为p1,p2,...,pn;给定一个已知点p,判断p在此多边形内还是外。 预备知识: 两线段相交的定义,如果一条线段的两端分别处在另一条线段的两端,则此两线段相交 判断2...

c++中如何判断一个点在多边形内部

转自:http://blog.csdn.net/hjh2005/article/details/9246967 新页面(new page)介绍了将样条曲线添加到此技术的内容。也可以访问多...

如何判断一个点是否在不规则图形内部?

网上查了下,有办法是说连接目标点与各顶点,然后算夹角,加起来为360度,则在内部,否则在外部,但是这种办法对凹形不对。   1) 我自己想了个办法:      直接沿这个目标点画一条...

判断一个点在任意四边形内

通过面积法,判断点P是否在四边形(A,B,C,D)内。如果在四边形内,则四边形的面积=面积(P,A,B)+面积(P,B,C)+面积(P,C,D)+面积(P,D,A); 反之不在四边形内。Java代码...

记录一下另外一个,在棋盘上自动寻找最近的坐标节点的算法

思路也挺简单的,主要就是获取到当前触摸的点,然后判断它离哪个节点近,自动判断到最近的那个节点。 刚开始我算法思路都是很明确的,但是不知怎的就是不到节点上,后面一看,是精度的问题,然后就把节点全部变成...

C++判断点是否四边形内部

// 判断点是否在四边形内部 // 参数: // POINT pCur 指定的当前点 // POINT pLT, POINT pLB, POINT pRB, POINT pR...

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

原文地址:http://www.cnblogs.com/armyfai/p/3529243.html 在GIS(地理信息管理系统)中,判断一个坐标是否在多边形内部是个经常要遇到的问题...
  • VHeroin
  • VHeroin
  • 2017年05月11日 07:40
  • 681
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:判断一个坐标点是否在不规则多边形内部的算法
举报原因:
原因补充:

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