пытаясь вычислить расстояние между 2 3-мерными координатами в Java - PullRequest
0 голосов
/ 06 сентября 2018

, поэтому я пытаюсь создать программу, которая может возвращать расстояние между двумя координатами.

но я получаю координаты в строковом формате, например: 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);)

1 Ответ

0 голосов
/ 06 сентября 2018

Несколько вещей не так с этим кодом. Самое главное:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...