Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用多边形包含_Java_Polygon_Contains - Fatal编程技术网

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方向上与点相邻的空间位于边界内
点(300400)位于水平边界上,但方向Y上紧邻的空间不在边界=>contains内将返回false


然而,点(300200)位于水平边界上(也位于形状边界上),并且在Y和X方向上紧靠它的空间位于边界内=>contains将返回true。

+1为正确答案,尽管这与双精度无关-正如您所指出的,这是由于“内部”(过于简化)包括顶部和左侧边缘,但不包括底部和右侧边缘。