如何确定一个点位于多边形上?

时间:2020-06-10 15:19:16

标签: java awt polygon computational-geometry convex-hull

我正在解决一个问题,要求找出一个点是否严格位于多边形内

好吧,我知道java awt包,所以我可以使用它

polygon.contains(pointToCheck)

但是问题是根据官方文档,definition of insideness的给出为

仅当且仅当以下情况时,点才被认为位于Shape内:

  • 它完全位于Shape边界之内或
  • 它恰好位于Shape边界上,并且在X方向上紧邻该点的空间完全在边界内或
  • 它完全位于水平边界线段上,并且在Y方向上与该点紧邻的空间位于边界内

那么如何删除多边形上的点数?

如果有人可以提出一种更好的算法来检查点是否严格位于多边形内,那么它也会有所帮助。

2 个答案:

答案 0 :(得分:1)

用于多边形点的Hao算法包括检查点是否位于边界上。 paper包含相当了解的伪代码,如果您想自己编写的话。我已经编写了JavaScript实现here

在Java世界中,另一种选择可能是查看Java Topological SuitePointLocator method可能会满足您的要求。

答案 1 :(得分:-1)

一个简单的解决方法是检查您的观点是否在轮廓上。一种实现方法是依次旋转所有边缘,将端点之一移至原点,然后旋转以将另一点移到X轴上,例如(0, L)。那么,如果Y = 00 ≤ X ≤ L的话,您的观点就处于边缘。

然后,您可以将此测试与内部测试结合起来。


警告:根据您的应用程序和数字表示坐标的方式,“在边缘”的定义可以有不同的定义。