在3d对象上找到2个点并获得它们的距离

时间:2009-12-05 03:03:55

标签: math 3d trigonometry

确定。所以我猜想在谷歌地球上突出显示纽约市和北京......

我正在试图弄清楚如何将点映射到3d基本对象(球体)上,通过圆周的任何方向获得它们的距离,以及它们与直径的距离。这些点将是纬度和经度坐标。

现在,这就是我想用来映射坐标(代码不可知版本):

  x1 =  radius * cos(long1) * cos(lat1);
  y1 =  radius * sin(long1) * cos(lat1);
  z1 =  radius * sin(lat1);

但我几乎可以肯定它错了。我怎样才能得到每个点的位置并直接计算它们在球体直径上的距离以及它们围绕球体圆周的距离?

感谢。

1 个答案:

答案 0 :(得分:4)

你其实非常接近。要获得直线距离,您只需要:

sqrt((x2-x1)^ 2 +(y2-y1)^ 2 +(z2-z1)^ 2)

对于大圆周围的距离,请记住它是pi diam 角度。从地球中心到两点的矢量的点积是角度的余弦。所以,你得到:

pi diam acos((x1 * x2 + y1 * y2 + z1 * z1)/ diam ^ 2)

当然,如果你绕地球走另一条路有第二个距离,但为此你需要2 * pi - acos(...)。