我正在解决一个问题,要求找出一个点是否严格位于多边形内
好吧,我知道java awt包,所以我可以使用它
polygon.contains(pointToCheck)
但是问题是根据官方文档,definition of insideness的给出为
仅当且仅当以下情况时,点才被认为位于Shape内:
- 它完全位于Shape边界之内或
- 它恰好位于Shape边界上,并且在X方向上紧邻该点的空间完全在边界内或
- 它完全位于水平边界线段上,并且在Y方向上与该点紧邻的空间位于边界内
那么如何删除多边形上的点数?
如果有人可以提出一种更好的算法来检查点是否严格位于多边形内,那么它也会有所帮助。
答案 0 :(得分:1)
用于多边形点的Hao算法包括检查点是否位于边界上。 paper包含相当了解的伪代码,如果您想自己编写的话。我已经编写了JavaScript实现here。
在Java世界中,另一种选择可能是查看Java Topological Suite。 PointLocator method可能会满足您的要求。
答案 1 :(得分:-1)
一个简单的解决方法是检查您的观点是否在轮廓上。一种实现方法是依次旋转所有边缘,将端点之一移至原点,然后旋转以将另一点移到X
轴上,例如(0, L)
。那么,如果Y = 0
和0 ≤ X ≤ L
的话,您的观点就处于边缘。
然后,您可以将此测试与内部测试结合起来。
警告:根据您的应用程序和数字表示坐标的方式,“在边缘”的定义可以有不同的定义。