怎么判断一个点是不是在多边形区域内
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么判断一个点是不是在多边形区域内相关的知识,希望对你有一定的参考价值。
怎么判断一个点是否在多边形区域内
最好办法不要太复杂因为要写成代码
这个问题有点复杂啊。。。想了一会才有答案。不过也还有点复杂。
先假设需要判断的点为px
首先,思路是这样的。你先在多变形polygon中选取一个点pa,然后,连接pa和px,并且以px为顶点做一条足够长的射线段line。如果px在多边形内,line只会穿过一次polygon的边。如果px在多边形外边,则会穿过两次polygon的边。好,这就是我们判断的依据了。
在说说实现思路方面。
首先,我是这样想的,让画板中所有的点都拥有一个值。
多边形的边上的点的值为-1,其余的都为1.
这样,我们的射线段上所有点值的积如果为-1,在line穿过一次polygon,则px在polygon内部。
积值为1则line穿过两次polygon,px在polygon外部。
代码方面。
你可能需要这样的一个类
class PointExt
{
POINT pt;//保存点值
int value;//保存值
}
这个程序的计算量可能会有点大。
建议:
尽量不要使用迭代
如果你能相处更好的办法来保存点值,就更好了。
还有个简单的方法:
你在画图的时候,就让polygon边上的点值为0,多边形内部的点值为1,外部的点值为-1.
那么通过,你那个点就可以直接查看px的点值,就知道了。
但这个方法较为复杂的是初始化,当多边形较为简单的时候还好,当多边形比较复杂的时候,初始化点值就是个比较麻烦的事情了。。。
不过好像windows有一些这样的api函数,不过我还没用过。。。
以上是关于怎么判断一个点是不是在多边形区域内的主要内容,如果未能解决你的问题,请参考以下文章
在百度地图上手绘了一个多边形,随便用鼠标点击地图获取改点坐标,并判断是不是属于在手绘的多边形内
如何判断点在一个区域内?用户绘制区域(射线法)判断点在多边形区域,报警区域