我正在解决一个问题,需要找出一个点是否严格地位于一个多边形内。
我知道java awt包,所以我可以用这个。
多边形.包含(pointToCheck)
但问题是根据官方文件的规定 隐匿性的定义 给定为
如果且仅在以下情况下,一个点才被认为位于一个形状的内部。
- 它完全位于一个形状的边界内,或者
- 它正好位于形状边界上,并且紧邻X方向增加的点的空间完全在边界内或
- 它恰好位于水平边界线上,且紧邻Y方向增加的点的空间在边界内。
那么如何去除位于多边形上的点的计数?
如果有人能建议一个更好的算法来检查一个点是否严格位于多边形内,这也将是有帮助的。
Hao算法的点在多边形中包括检查该点是否位于边界上。边界上的 纸张 如果你想自己写的话,包含了相当容易理解的suedo代码。我已经写了一个javascript实现 此处.
在java的世界里,另一个选择可能是查看 Java拓扑学套件. 该 PointLocator方法 可能就是你想要的。
一个简单的变通方法是检查你的点是否位于轮廓上。一种方法是依次检查所有的边缘,将其中一个端点移动到原点,然后旋转以使另一个点在轮廓上。X
轴,例如在 (0, L)
. 那么你的观点是在边缘,如果 Y = 0
和 0 ≤ X ≤ L
.
然后您可以将此测试与内部性测试相结合。
注意:根据你的应用程序和坐标的数值表示方式,"在边缘上 "的定义可以有不同的定义。