我正在使用 Three.js 进行太阳系可视化。现在我的行星有基本的圆形轨道,我想让我的模型尽可能逼真。我浏览了 wiki 和一些文章,但这些东西非常先进。
我并不真正关心成千上万年的轨道,我只想要一个接近蜜蜂的现实模型,它将证明:
- 正确的椭圆轨道
- 倾角
- 动态变化的速度(近日点更快)
我想知道是否有一种足够复杂的方法来计算我的行星在给定t (动态变化)下的x,y,z可能使用轨道元素。
希望,我把我的想法说清楚了。谢谢
我正在使用 Three.js 进行太阳系可视化。现在我的行星有基本的圆形轨道,我想让我的模型尽可能逼真。我浏览了 wiki 和一些文章,但这些东西非常先进。
我并不真正关心成千上万年的轨道,我只想要一个接近蜜蜂的现实模型,它将证明:
我想知道是否有一种足够复杂的方法来计算我的行星在给定t (动态变化)下的x,y,z可能使用轨道元素。
希望,我把我的想法说清楚了。谢谢
也许您应该尝试对轨道进行二维投影。在这种情况下,您只需将椭圆参数化为向量函数,例如 ɣ(x(t), y(t))。
然后为了应用物理方面,想象两个质心,太阳 M 和给定的行星 μ。行星 F 上的力由 F=GμM/|ɣ|² 给出,加速度遵循牛顿第二定律 a=GM/|ɣ|²,始终指向较大的质量 M。
为了设置曲线 ɣ,您可以使用http://en.wikipedia.org/wiki/Ellipse#Equations
如果您对显示一些关键元素的近似值感到满意,那么您可以尝试为所有行星计算几年的查找表。例如,海王星的轨道周期为 164 年,因此计算该期间每个月所有行星的位置应该给出一个相对易于管理的比例表。要获得轨道速度变化的视觉表示,您需要更精细的分辨率。计算后,您只需要构建一个动画来绘制位置。
计算相当复杂。我不打算在这里重复计算——它太长了——但是你可以在这里找到一个很好的描述,以及一个用 QBasic 编写的示例程序
主要步骤如下:
查找行星在其轨道上的位置 - 查找自元素日期以来的天数 - 从平均经度和每日运动中查找平均异常 - 使用中心方程查找真正的异常 - 查找半径矢量星球
将该位置参考黄道 - 因此找到行星的日心黄道坐标
一旦有了日心坐标,将它们转换为您自己的参考系(链接页面显示了如何为地心坐标执行此操作,但这没有用。您需要自己解决这个问题。)将坐标添加到你的桌子。
您可以尝试实时运行计算,这会更灵活,但可能会限制帧速率。这里可能需要一些实验。
感谢 Keith Burnett(链接页面的作者)提供我在上面浓缩的详细信息。
这是一些用 C++ 完成任务的代码。尽管它没有将日期作为参数。这有点复杂。但是 - 用正确的值替换i
应该可以解决问题。(我使用此代码绘制围绕太阳的轨道路径。
double x = distanceFromSun * orbitScaleFactor;
double y = sin(inclination) * distanceFromSun * orbitScaleFactor;
double z = semiMinorAxis * orbitScaleFactor;
for (double i = 0; i < 2.0 * PI; i += PI / 32.0) {
x = cos(i) * x;
y = cos(i + lonOfAscendingNode) * y;
z = sin(i) * z;
}
PS即使您的问题专门针对javascript,我也不会为您提供c ++代码而感到内-我认为方程式是您真正想要的。
你可以在这里看到我的完整代码:https ://github.com/SyntaxRules/SolarSystemSimulation/blob/master/src/Planet.cpp
您也可以在那里找到变量的信息。:)