【发布时间】:2014-10-07 08:50:22
【问题描述】:
我正在按程序生成 2D 太阳系,我希望行星有不同的、持续的轨道。我一直在试图弄清楚如何计算在任何给定时间相对于它在轨道上运行的物体的当前角度,无论他们的当地时间如何,这对每个人来说都应该是相同的。如果我使用播种 Math.random 来计算这些生成的变量,该怎么做?
【问题讨论】:
标签: javascript math simulation astronomy procedural-generation
我正在按程序生成 2D 太阳系,我希望行星有不同的、持续的轨道。我一直在试图弄清楚如何计算在任何给定时间相对于它在轨道上运行的物体的当前角度,无论他们的当地时间如何,这对每个人来说都应该是相同的。如果我使用播种 Math.random 来计算这些生成的变量,该怎么做?
【问题讨论】:
标签: javascript math simulation astronomy procedural-generation
根据开普勒定律模拟太阳系
这在 3D 中很容易,在 2D 中更容易(没有倾斜)看这里
只需使用一些全局同步时间作为参数。我的意思是所有玩家/观察者都应该彼此同步时间)
对轨道元素参数使用种子伪随机数
like a,e,i,o,O of rough 为它们添加一些范围,例如:
a - 长半轴应在<0.01,200> [AU] 范围内,所以
a=(0.01+(200.0-0.01)*Random())*AU;`
其中AU是天文单位常数,Random给出伪随机数<0.0,1.0>
e 偏心率应在<0.00,1.00> [-]
<0,2.0*PI> [rad]
同样,您可以添加所有支持的轮换周期。请注意,围绕中心物体的平均轨道周期取决于它与它的距离和质量比(对于游戏,你可以忽略这一点)。此外,还有从太阳系观测到的行星质量/大小/距离比的经验方程。
[备注]
在 2D 中没有倾角,因此您可以省略倾角和节点角度,因此只保留圆周角。
所有旋转周期也有一些定义的时间开始角度称为epoch。
所有参数都可以随时间变化(但对于游戏来说,这无关紧要,除非你想测量其中的东西......)
【讨论】: