如何实现持久的、变化的时间周期

How to implement persistent, varying time cycles

本文关键字:变化 时间 周期 何实现 实现      更新时间:2023-09-26

我正在按程序生成2D太阳系,我希望行星有不同的、持久的轨道。我一直在想如何计算出在任何给定时间相对于绕轨道运行的物体的当前角度,无论当地时间如何,每个人都应该是一样的。如果我使用种子Math.random来计算这些生成的变量,如何做到这一点?

  1. 根据开普勒定律对太阳系进行模拟

    这在3D中很容易,在2D(无倾斜)中更容易查看此处

    • 求解开普勒方程
    • C中的地球样本模拟++

    只需使用一些全局同步的时间作为参数即可。我的意思是,所有玩家/观察者之间的时间都应该同步)

  2. 使用种子伪随机数作为轨道元素参数

    像粗略的a,e,i,o,O一样为它们添加一些范围,例如:

    • 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> [-] 范围内

    • i,o,o是角度,因此<0,2.0*PI> [rad]

    类似地,您可以添加所有支持的旋转周期。注意,围绕中心物体的平均轨道周期取决于它与中心物体的距离和质量比(对于游戏,你可以忽略这一点)。此外,还有从太阳系观测到的行星质量/大小/距离比的经验方程。

[注释]


2D中没有倾斜度,因此可以省略倾斜度和节角,因此只保留轴周角。
所有旋转周期也有一些定义时间的开始角,称为epoch
所有参数都可以随时间变化(但对于游戏来说,这是不相关的,除非你想测量其中的东西…)