Java Path2D--.contain()不工作
我正在尝试使用Path2D查看点是否包含在多边形中 最后一行System.out.println(poly.contains(lat1,lon1))打印“false”,尽管我知道坐标(lat1,lon1)在“testBound”中指定的多边形内。“.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;
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的正确答案。