我有一个问题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
。
为什么结果不同?
奇怪的行为。可能是这样,观察到了内部定义中的一些特殊情况(请参见下文,从文档中复制)。另一个解释可能是双精度值的精度。
内部性的定义:当且仅当:
- 它完全位于形状边界内
- 它正好位于Shape边界上,并且在X方向上紧邻该点的空间完全在边界内,或者
- 它恰好位于水平边界线段上,并且在递增的Y方向上紧邻该点的空间在边界内。
点(300,400)位于水平边界上,但在Y方向上紧邻的空间不在边界内=> contains将返回false。
但是,点(300、200)位于水平边界(也位于形状边界),并且在Y和X方向上紧邻该点的空间在边界内=> contains将返回true。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句