簡體   English   中英

試圖計算java中2個3維坐標之間的距離

[英]trying to calculate the distance between 2 3dimentional coordinates in java

所以我正在嘗試制作一個可以返回兩個坐標之間距離的程序。

但我以這樣的字符串格式獲取坐標: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);)

這段代碼有幾個問題。 最重要的是:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM