读书人

判断一个点是否在坐标点列围成的面内,

发布时间: 2012-04-22 18:34:46 作者: rapoo

判断一个点是否在坐标点列围成的面内
不知道放这个板块合不合适?

惭愧,作为数学类专业出身,对几何的抽象能力实在不高。最好能简要说明可行的数学算法,有编程实现的范本更是不胜感激(最好是C#或java)。


[解决办法]
待判断的点记为p0,其余N点分别记为p1,p2, ... ,pn 。
求这1+n个点的凸包,如果凸包中含了点p0,则说明p0在点列围成的面积内;否则,p0在面积内,而不是在凸包上。
[解决办法]
角度和360度
[解决办法]
判断点在多边形内部用射线法
MFC中有个函数叫PtInRegion应该就是这种方法。

[解决办法]
http://blog.csdn.net/dch4890164/archive/2009/09/22/4581177.aspx
原理差不多,给你提供一个思路
==================================
不过你这个问题只存在判断,不存在搜索问题
[解决办法]

探讨
判断点在多边形内部用射线法
MFC中有个函数叫PtInRegion应该就是这种方法。

[解决办法]
感觉算内角和360比较简单,比凸包+射线要简单些。
[解决办法]
探讨
感觉算内角和360比较简单,比凸包+射线要简单些。

[解决办法]
>感觉算内角和360比较简单,比凸包+射线要简单些。
乃肯定没写过内角和。那误差乃会泪流满面的。

射线的话rand()一个方向一般就可以了。随机的方向的话和已知方向重合的概率异常小。然后枚举每条多边形的边,和射线判几个交点就完了。注意处理交点是顶点的情况(其实如果是和半闭半开的边判相交的话这点可以忽视)
[解决办法]
如LS两位所说的话,误差太大的话,算角度和确实不太合适。

如果用凸包的话,就不用再依靠射线法了,只要将该点也放入凸包运算当中,如果该点在凸包上,则在多边形外,否则在多边形内,多次判断的话,通过n*log(n)的预处理之后,每次只需要log(n)就行了,
如果只是判断一次的话,我觉得用凸包恐怕效率不算高,感觉应该有更好的方法。

读书人网 >软件架构设计

热点推荐