所以我试图制作一个可以返回2个坐标之间距离的程序。
但是我以这样的字符串格式获取坐标:23 60 600。
23是X轴,60是Y轴,600是Z。
使用以下公式计算这些坐标之间的差:
距离= √[ (xA − xB)2 + (yA − yB)2 + (zA − zB)2 ]
请注意,坐标可以为负
所以最后我想这样做
(input) coordinate a: 20 10 500
(input) coordinate b: -20 200 21
(output) distance between a and b
这是我尝试过的方法,但是一段时间后,我得出结论认为它不起作用。
String[] parts1 = cord1.split(" ");
String[] parts2 = cord2.split(" ");
// space x y z
// [0] [1] [2] [3]
int v1 = Integer.parseInt(parts1[1]) - Integer.parseInt(parts2[1]) * 2;
int v2 = Integer.parseInt(parts1[2]) - Integer.parseInt(parts2[2]) * 2;
int v3 = Integer.parseInt(parts1[3]) - Integer.parseInt(parts2[3]) * 2;
double conversion = v1 + v2 + v3;
String a = String.valueOf(conversion);
String b = a.replace("-","");
double c = Integer.parseInt(b);
System.out.println(c);
double dist = Math.sqrt(c);
它给出了此错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 3
at codes.Main.main(Main.java:36)
(第36行是:double c = Integer.parseInt(b);)
答案 0 :(得分:0)
此代码有几处错误。最重要的是:
int v1 = Integer.parseInt(parts1[1]) - Integer.parseInt(parts2[1]) * 2;
int v2 = Integer.parseInt(parts1[2]) - Integer.parseInt(parts2[2]) * 2;
int v3 = Integer.parseInt(parts1[3]) - Integer.parseInt(parts2[3]) * 2;
您不需要做(xA - xB)^2
等操作。这只是使B
的坐标加倍。相反,您应该具有:
int v1 = Math.pow(Integer.parseInt(parts1[1]) - Integer.parseInt(parts2[1]), 2);
// same for v2 and v3
实数的平方始终为非负数,因此您无需删除任何减号。
double dist = Math.sqrt(v1 + v2 + v3);