我试图想出一个公式来估计两颗轨道行星形成一个目标角时的重复发生时间。为了简单起见,我做了一些非常重要的假设:
下面是一个帮助理解我的挑战的图表(Google ):Cxsg/edit?usp=sharing
我运行了一个模拟程序,并将数据存储在电子表格(Google )中:https://docs.google.com/spreadsheet/ccc?key=0AgPx8CZl3CNAdGRRTlBUUFpnbGhOdnAwYmtTZWVoVVE&usp=sharing
利用模拟中存储的数据,我确定了一种方法来估计两颗轨道行星形成一个特定角度的第一次发生:
初始状态
Planet 1: position=0 degrees; speed=1 degree/day
Planet 2: position=30 degrees; speed=6 degrees/day
Target Angle: 90 degrees我执行了以下步骤:
Speed Difference: s2 - s1 ; 6 - 1 = 5 degrees / day
Angle Formed: p2 - p1 ; 30 - 0 = 30 degrees
Find Days Required
Target = Angle + (Speed Diff * Days)
Days (d) = (Target - Angle) / Speed Diff
90 = 30 + 5d
60 = 5d
d = 12 days
Prove:
Position of Planet 1: 0 + (1 * 12) = 12 degrees
Position of Planet 2: 30 + (6 * 12) = 30 + 72 + 102 degrees
Angle: 102 - 12 = 90 degrees根据这个逻辑,我回到了一个天文学程序,它使用了阿童木的瑞士星历。估计的日子使我足够接近确定两颗行星在不影响应用性能的情况下达到理想角度的日期和时间。
这里是我的问题所在:考虑到我所知道的信息,我应该采取什么方法来估计再次达到90度角的重复发生时间?。
谢谢你抽出时间提前阅读这篇文章。
发布于 2014-04-23 09:29:10
没有一个简单的公式,但有一个算法,你可以编程,以确定结果。五角角也是正确的,因为你需要考虑n*360。你也是正确的,你停止其中一个行星和工作速度的差异。
D天后,行星间的度数相差30 + d*5。
因为我们只对0到360之间的度感兴趣,那么行星间的角度差是(30 + d*5) mod 360。
如果您不知道,当a被b除以时,mod b会给出剩余的部分,而且大多数编程语言都内置了此操作(电子表格也是如此)。
当差值为90度或270度时,你会发现你想要d的值。
因此,您需要在任何时候找到d的值。
(30 + d*5) mod 360 = 90或(30 + d*5) mod 360 = 270
伪码算法
FOR (d=0; d<11; d=d+5)
IF((30 + d*5) MOD 360 = 90 OR (30 + d*5) MOD 360 = 270)
PRINT d
NEXT发布于 2014-04-23 08:13:30
有趣的是,关于角度,有不同的方式来表示相同的角度。所以你现在设置
Target = 90一次革命之后,同样的角度可以写成
Target = 90 + 360 = 450或者一般情况下,n革命以后
Target = 90 + n * 360如果您也希望具有相反方向的相同角度,则可以设置
Target = -90 + n * 360如果你用解你的方程的每一个目标角度,你会找到所有的事件,你正在寻找。
https://stackoverflow.com/questions/23237577
复制相似问题