如何计算地球上某个地点和太阳之间的角度?

7

我的应用程序需要计算两条不同线之间的角度:

1)第一条线是从地球上一个由经度和纬度定义的点到太阳中心。

2)第二条线是从地球上一个由经度和纬度定义的点到距离地球最近的月球表面。

我不知道该如何开始。有什么提示吗?


一些基本信息:http://www.physicalgeography.net/fundamentals/6h.html - Orbling
2
两点之间的角度是多少,请问? - TonyK
2
我认为在这种情况下Java排名最后。 - adarshr
你对角度的定义有点混乱。在第一种情况下,你定义了一条线(地球上的点和太阳中心),但没有定义组成角度的另一条线是什么。同样,在第二个定义中也是如此(但需要注意的是,如果你假设月球是球形的,那么到月球中心的线将总是通过月球表面最近的点 - 这可能会使事情变得更容易)。 - Chris
3
日期在这里将非常重要,因为所有三个对象都在移动。这实际上是一个数学问题,而不是 Java 问题。 - jzd
显示剩余6条评论
5个回答

5
假设您已经计算出了所有三个感兴趣的点[*],其中O是观察者(地球上)的位置,S是太阳的位置,M是月球上的点,则:
OM . OS = |OM| * |OS| * cos(theta)

换句话说,要计算 theta,需要对这两个向量进行点积运算,将结果除以这两个向量的大小,然后取其反余弦值。

[*] 你的问题只询问了两条线之间的角度 - 如果你想知道如何在任意时间计算实际的线路,则应重新编写你的问题。


有趣的是,常见的库(考虑标准库而不是第三方库)是否提供点积功能,还是需要自己进行数学计算?我从未尝试过... - Chris
这在数学库中很常见,但无论如何都很简单。如果你有两个三维向量A和B,那么它只是(Ax * Bx) + (Ay * By) + (Az * Bz) - Alnitak
谢谢,但其中一个问题是获取太阳和月亮的位置。 - RoflcoptrException
凭借您的 7k 声望,现在应该知道如何撰写一个准确的问题了……建议您修改此问题,使其成为关于两个任意向量之间夹角的问题,然后编写一个新问题,询问如何计算太阳和月亮的位置。 - Alnitak

1
首先,问题在于什么时间点。月球绕着地球旋转,而地球则绕着太阳旋转,因此你提到的距离和角度在不同的时间点是不同的。
例如,在发生日食时,角度接近于零。
因此,如果没有给定时间信息以及确切了解地球、月球和太阳在给定时间的位置,计算是不可能的。

1

你可能想要深入研究Celestia的源代码,以查找能够让你确定地球上某一点相对于月球和太阳中心位置的方程式。

当你有了这些坐标后,可以应用Alnitak的建议使用向量点积


1

1
甚至更好的是,“纽约时间晚上9点时太阳和月亮之间的角度”。太棒了! - Steve Jessop

0
我建议这样做:将所有坐标转换为一个唯一的坐标系(例如,地球上点的经度/纬度中的太阳和月亮位置)。然后你可以在该坐标系中轻松地计算角度。

我建议你尝试想象一下在没有这个步骤的情况下完成它。 :P - Unreason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接