首页 > 解决方案 > 试图在java中计算2个3维坐标之间的距离

问题描述

所以我正在尝试制作一个可以返回两个坐标之间距离的程序。

但我以这样的字符串格式获得坐标: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);)

标签: javastringcoordinates

解决方案


这段代码有几个问题。最重要的是:

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);

推荐阅读