Java Path2D--.contain()不工作

Java Path2D--.contain()不工作,java,arrays,gps,path-2d,Java,Arrays,Gps,Path 2d,我正在尝试使用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;

我正在尝试使用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));
}


}
packagepoly;
导入java.awt.Polygon;
导入java.awt.geom.Path2D;
导入java.util.ArrayList;
导入java.util.array;
公共级多边形3{
公共静态最终双lat1=40.1032946;
公共静态最终双lon1=-84.5110052;
公共静态最终字符串testBound=“40.203294,-84.521005;40.203294,-84.501005;40.003294,-84.521005;40.003294,-84.501005”;
公共静态void main(字符串[]args){
字符串[]test=testBound.split(“;”);
ArrayList latList=新的ArrayList();
ArrayList lonList=新的ArrayList();
for(字符串t:测试){
字符串[]latlng=t.split(“,”);
latList.add(Double.parseDouble(latlng[0]);
添加(Double.parseDouble(latlng[1]);
}
系统输出打印项次(latList);
系统输出打印项次(lonList);
双latpoints[]=latList.toArray(新的双latList.size());
Double lonpoints[]=lonList.toArray(新的Double[lonList.size()]);
系统输出打印LN(latpoints);
系统输出打印项次(lonpoints);
Path2D poly=新的Path2D.Double();
对于(int i=0;i
首先,您没有正确创建多边形。 moveTo每次将此多边形的第一个点移动到不同的位置,但不绘制直线。要创建多边形,需要执行以下操作:

    poly.moveTo(latpoints[0], lonpoints[0]);
    for(int i = 1; i < latpoints.length - 1; i++) {
        poly.lineTo(latpoints[i], lonpoints[i]);
    }
poly.moveTo(latpoints[0],lonpoints[0]);
对于(int i=1;i

请注意,我们从一开始就画了两条线,通过closePath()我们可以完成这个形状,因为closePath()从最后一点到第一点绘制直线。

首先,您不能正确创建多边形。 moveTo每次将此多边形的第一个点移动到不同的位置,但不绘制直线。要创建多边形,需要执行以下操作:

    poly.moveTo(latpoints[0], lonpoints[0]);
    for(int i = 1; i < latpoints.length - 1; i++) {
        poly.lineTo(latpoints[i], lonpoints[i]);
    }
poly.moveTo(latpoints[0],lonpoints[0]);
对于(int i=1;i

请注意,我们从一开始就画了两条线,通过closePath()我们可以完成这个形状,因为closePath()从最后一点到第一点绘制直线。

如何创建多边形?

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

  • 使用
    moveTo
    移动到第一个点
  • 使用
    lineTo
    连接所有其他点
  • 使用
    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();
    
    由于要测试的点位于中心,因此可能不会将其视为形状内部的点

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

    4 - 1
    |   |
    3 - 2
    

    点将在内部考虑。

    如何创建多边形?

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

  • 使用
    moveTo
    移动到第一个点
  • 使用
    lineTo
    连接所有其他点
  • 使用
    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();
    
    由于要测试的点位于中心,因此可能不会将其视为形状内部的点

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

    4 - 1
    |   |
    3 - 2
    

    这一点将在内部考虑。

    谢谢您的回答。下面的答案适用于我的测试用例,但如果我对更高级的多边形有问题,这将有所帮助。感谢你花了这么多时间answer@javanewbie14很抱歉,我的回答创造了一个三角形,我不知道我昨天是怎么想的,但这个是正确的。谢谢你的回答。下面的答案适用于我的测试用例,但如果我对更高级的多边形有问题,这将有所帮助。感谢你花了这么多时间answer@javanewbie14很抱歉,我的答案创造了三角形,我不知道我昨天是怎么想的,但这个答案是正确的。很抱歉,这个答案是不正确的,我不知道我昨天出了什么问题,但这里我们创造了traingle。请看@Loris Securo的答案,答案是正确的。很抱歉,这个答案不正确,我不知道昨天我出了什么问题,但我们在这里创建了traingle。请看@Loris Securo的正确答案。