Java 使用多边形包含
我有一个问题。我正在测试一个点是否在多边形内 这就是多边形的构造方式:Java 使用多边形包含,java,polygon,contains,Java,Polygon,Contains,我有一个问题。我正在测试一个点是否在多边形内 这就是多边形的构造方式: Polygon p=newpolygon(newint[]{300300500500},newint[]{200400400200},4); 对于顶点(300400),输出为false,这就是我想要的: System.out.println(p.contains)(新点(300400))//打印“假” 但是,对于第一个顶点((300200)),它将打印true: System.out.println(p.contains
Polygon p=newpolygon(newint[]{300300500500},newint[]{200400400200},4);
对于顶点(300400)
,输出为false
,这就是我想要的:
System.out.println(p.contains)(新点(300400))//打印“假”
但是,对于第一个顶点((300200)
),它将打印true
:
System.out.println(p.contains(新点(300200));//打印“真实”
根据第一条语句,它还应该打印false
为什么结果不同?奇怪的行为。在这种情况下,可能会观察到来自的一些特殊情况(见下文,从文档中复制)。另一个解释可能是双值的精度 内部性定义:当且仅当满足以下条件时,才认为点位于形状内部:
- 它完全位于形状边界内或
- 它正好位于形状边界上,并且在递增X方向上紧靠该点的空间完全在边界或边界内
- 它正好位于水平边界段上,并且在Y方向上与点相邻的空间位于边界内
然而,点(300200)位于水平边界上(也位于形状边界上),并且在Y和X方向上紧靠它的空间位于边界内=>contains将返回true。+1为正确答案,尽管这与双精度无关-正如您所指出的,这是由于“内部”(过于简化)包括顶部和左侧边缘,但不包括底部和右侧边缘。