我正在Three.js中进行太阳系可视化。现在我的行星有基本的圆形轨道,我想让我的模型尽可能逼真。我浏览了wiki和一些文章,但这些东西非常先进。
我并不关心数千年和数百万年的轨道,我只是想要一个接近实际的模型来证明:
我想知道是否有一种足够复杂的方法可以使用轨道元素在给定的 t (动态变化)下为我的行星计算 x,y,z 。 / p> 希望,我明白我的想法。感谢
答案 0 :(得分:1)
也许你应该尝试对轨道进行二维投影。在这种情况下,您只需将ellipe参数化为矢量函数,例如ɣ(x(t),y(t))。
然后为了应用物理方面,想象两个质心,太阳M和给定行星μ。行星F上的力由F =GμM/ |ɣ|²给出,加速度遵循牛顿第二定律,a = GM / |ɣ|²,总是指向较大的质量,M。
要设置曲线ɣ,您可以使用http://en.wikipedia.org/wiki/Ellipse#Equations
答案 1 :(得分:1)
如果您对近似显示几个关键元素感到满意,那么您可以尝试在几年内计算所有行星的查找表。例如,海王星的轨道周期是164年,所以在这个时期内每个月计算所有行星的位置应该给出一个相对可控的比例表。为了直观地表示轨道速度的变化,您需要更精细的分辨率。一旦计算出来,你只需要构建一个动画来绘制位置。
计算非常复杂。我不打算在这里重复计算 - 它太长了 - 但你可以找到一个好的描述here,以及一个用QBasic编写的示例程序
原则步骤如下:
找到行星在其轨道上的位置 - 查找自元素日期以来的天数 - 从平均经度和每日运动中找出平均异常 - 使用中心方程找到真正的异常 - 找到行星的半径矢量
将这个位置提到黄道 - 因此找到了行星的日心坐标黄道坐标
一旦你有了日心坐标将它们转换成你自己的参考框架(链接的页面显示了如何为地心坐标做这个,但这不会有用。你需要解决这个问题。你自己。)将坐标添加到你的表格中。
您可以尝试实时运行计算,这会更灵活,但可能会限制帧速率。这里可能需要一些实验。
感谢Keith Burnett(链接页面的作者)了解我上面简要介绍的细节。
答案 2 :(得分:0)
以下是在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;
}
P.S即使你的问题特别提到了javascript,我也不会感到内疚,因为你提出了c ++代码 - 我认为这个等式正是你真正想要的。
您可以在此处查看我的完整代码:https://github.com/SyntaxRules/SolarSystemSimulation/blob/master/src/Planet.cpp
您也可以在那里找到变量的信息。 :)