我遇到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
。
为什么结果不同?
答案 0 :(得分:3)
奇怪的行为。情况可能就是definition of insideness中的一些特殊情况(见下文,从文档中复制)。另一个exlanation可能是double值的精确度。
内部性的定义:当且仅当:
时,才认为该点位于Shape内部
- 它完全位于形状边界内或
- 它恰好位于Shape边界上,与X方向增加的点紧邻的空间完全位于边界内或
- 它恰好位于水平边界线上,与Y方向上的点紧邻的空间位于边界内。
点(300,400)位于水平边界上,但是在方向Y上紧邻的空间不在边界内=> contains将返回false。
然而,点(300,200)位于水平边界上(也在形状边界上),并且在Y和X方向上与其紧邻的空间位于边界内=>包含将返回true。