使用多边形包含

时间:2015-03-18 14:30:36

标签: java polygon contains

我遇到Polygon#contains(Point)的问题。我正在测试一个点是否在多边形内部。

这就是Polygon的构建方式:

Polygon p = new Polygon(new int[]{300, 300, 500, 500}, new int[]{200, 400, 400, 200}, 4);

对于顶点(300,400),输出为false,这就是我想要的:

System.out.println(p.contains(new Point(300,400))); //prints "false"

但是,对于第一个顶点((300,200)),它会打印true

System.out.println(p.contains(new Point(300,200))); // prints "true"

根据第一个声明,它也应该打印false

为什么结果不同?

1 个答案:

答案 0 :(得分:3)

奇怪的行为。情况可能就是definition of insideness中的一些特殊情况(见下文,从文档中复制)。另一个exlanation可能是double值的精确度。

  

内部性的定义:当且仅当:

时,才认为该点位于Shape内部      
      
  • 它完全位于形状边界内或
  •   
  • 它恰好位于Shape边界上,与X方向增加的点紧邻的空间完全位于边界内或
  •   
  • 它恰好位于水平边界线上,与Y方向上的点紧邻的空间位于边界内。
  •   

点(300,400)位于水平边界上,但是在方向Y上紧邻的空间不在边界内=> contains将返回false。

然而,点(300,200)位于水平边界上(也在形状边界上),并且在Y和X方向上与其紧邻的空间位于边界内=>包含将返回true。