对于我的应用程序,我需要计算两个不同行之间的角度:
1)第一条线位于地球上由经度和纬度定义的点与太阳中心之间。
2)第二条线位于地球上由经度和纬度定义的点与月球表面距离地球的距离较小的点之间。
我不知道应该如何从那里开始。任何提示?
答案 0 :(得分:5)
假设您实际上已经计算了所有三个兴趣点[*],其中O
是观察者的位置(地球上),S
是太阳的位置, M
是月球上的点,然后:
OM . OS = |OM| * |OS| * cos(theta)
或者,换句话说,要计算theta
,取两个向量的点积,将结果除以这两个向量的幅度,然后取反余弦结果。
[*]你的问题只询问两行之间的角度 - 如果你想知道如何计算任何时刻的实际行,那么你应该重写你的问题。
答案 1 :(得分:1)
首先,问题是在什么时间点。月亮围绕地球旋转,而地球围绕太阳旋转,所以你提到的距离和角度在不同的时间点是不同的。
例如,当你有一个日食时,角度接近于零。
因此,如果没有关于地球,卫星和太阳位置的时间和精确知识的信息,那么计算是不可能的。
答案 2 :(得分:1)
您可能想要挖掘Celestia的来源,寻找可以让您确定地球上相对于月球和太阳中心点的位置的方程式。
如果你有这些坐标,请在矢量dot product s
上应用Alnitak的建议答案 3 :(得分:1)
作为这个问题的相关答案。你知道Wolframalpha.com可以解决这个问题吗?
例如,如果您正在寻找:
您可以使用Mathematica内核执行相同操作,并使用Java调用。
答案 4 :(得分:0)
我建议遵循以下步骤:将所有坐标转换为一个独特的坐标系(例如,地球边界点的经度/纬度中的太阳和月亮位置)。然后,您可以轻松地计算该坐标系中的角度。