java - 试图在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);)
解决方案
这段代码有几个问题。最重要的是:
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);
推荐阅读
- php - 子表中的数据表子远程未定义ID
- javascript - 创建一个函数,从 JSON 操作从华氏到摄氏的值
- openthread - 替换 Wpantund 已弃用
- python - 缺少可选依赖项“gcsfs”。处理 GCS 文件需要 gcsfs 库使用 pip 或 conda 安装 gcsfs
- kubernetes - “--dry-run”的无效参数“client”
- r - 如何使用 dplyr 函数而不报错?
- wordpress - 在配置 nginx 以在我的子域上打开 wordpress 时遇到问题
- python - 我安装 Geopandas 出了什么问题?
- android - 如何使 DefaultTimeBar 始终显示在 exoplayer
- vb.net - 请求列表框第一项的第一个和第三个字符返回第二个和第四个