gpt4 book ai didi

java - Path2D -- .contain() 不起作用

转载 作者:行者123 更新时间:2023-12-01 19:54:58 27 4
gpt4 key购买 nike

我正在尝试使用 Path2D 查看某个点是否包含在多边形内。

最后一行 System.out.println(poly.contains(lat1, lon1)) 打印“false”,即使我知道坐标(lat1, lon1)位于“testBound”中指定的多边形内。 “.contain()”不起作用吗?我错过了什么吗?

    package poly;

import java.awt.Polygon;
import java.awt.geom.Path2D;
import java.util.ArrayList;
import java.util.Arrays;

public class Polygon3 {
public static final double lat1 = 40.1032946;
public static final double lon1 = -84.5110052;
public static final String testBound = "40.203294,-84.521005;40.203294,-84.501005;40.003294,-84.521005;40.003294,-84.501005";




public static void main(String[] args) {
String[] test = testBound.split(";");
ArrayList<Double> latList = new ArrayList<Double>();
ArrayList<Double> lonList = new ArrayList<Double>();
for(String t : test) {
String[] latlng = t.split(",");
latList.add(Double.parseDouble(latlng[0]));
lonList.add(Double.parseDouble(latlng[1]));
}
System.out.println(latList);
System.out.println(lonList);

Double latpoints[] = latList.toArray(new Double[latList.size()]);
Double lonpoints[] = lonList.toArray(new Double[lonList.size()]);
System.out.println(latpoints);
System.out.println(lonpoints);
Path2D poly = new Path2D.Double();
for(int i = 0; i < latpoints.length; i++) {
poly.moveTo(latpoints[i], lonpoints[i]);
}
poly.closePath();
String testing = poly.toString();
System.out.println(testing);

System.out.println(poly.contains(lat1, lon1));
}


}

最佳答案

如何创建多边形?

要创建闭合多边形,您需要:

  1. 使用moveTo移动到第一个点
  2. 使用lineTo连接所有其他点
  3. 使用 closePath 将最后一个点与第一个点连接起来

例如:

for (int i = 0; i < latpoints.length; i++) {
if (i == 0) {
poly.moveTo(latpoints[i], lonpoints[i]);
}
else {
poly.lineTo(latpoints[i], lonpoints[i]);
}
}
poly.closePath();

为什么包含返回 false?

contains 返回 false 因为,由于点的顺序,您创建的不是正方形而是沙漏形状:

3   1
| X |
4 2

由于您测试的点位于中心,因此可能不会被视为在形状内部。

如果交换第三个和第四个点的顺序,那么您将创建一个正方形:

4 - 1
| |
3 - 2

并且该点将被视为内部。

关于java - Path2D -- .contain() 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49908850/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com