为了账号安全,请及时绑定邮箱和手机立即绑定

试图计算java中2个3维坐标之间的距离

试图计算java中2个3维坐标之间的距离

红颜莎娜 2021-09-03 13:02:09
所以我正在尝试制作一个可以返回两个坐标之间距离的程序。但我以这样的字符串格式获取坐标: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: 3at codes.Main.main(Main.java:36)(第 36 行是:double c = Integer.parseInt(b);)
查看完整描述

1 回答

?
子衿沉夜

TA贡献1828条经验 获得超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;

这不会做(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);


查看完整回答
反对 回复 2021-09-03
  • 1 回答
  • 0 关注
  • 322 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信