Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 3.js中太阳系的轨道力学可视化(行星的x、y、z)_Javascript_Math_Three.js_Visualization_Orbital Mechanics - Fatal编程技术网

Javascript 3.js中太阳系的轨道力学可视化(行星的x、y、z)

Javascript 3.js中太阳系的轨道力学可视化(行星的x、y、z),javascript,math,three.js,visualization,orbital-mechanics,Javascript,Math,Three.js,Visualization,Orbital Mechanics,我正在用Three.js制作太阳系可视化。现在我的行星有基本的圆形轨道,我想让我的模型尽可能真实。我浏览了维基和一些文章,但是这些东西非常先进 我真的不关心数千年和数百万年后的轨道,我只想要一个接近真实的模型,它将演示: 正确的椭圆轨道 倾向 动态变化速度(在近日点更快) 我想知道是否有一种足够复杂的方法来计算给定t(动态变化)的行星的x,y,z,可能使用轨道元素 希望,我把我的想法说清楚了。谢谢,也许你应该试试轨道的二维投影。在这种情况下,您只需将椭圆参数化为向量函数,如ɣ(x(t),y(t)

我正在用Three.js制作太阳系可视化。现在我的行星有基本的圆形轨道,我想让我的模型尽可能真实。我浏览了维基和一些文章,但是这些东西非常先进

我真的不关心数千年和数百万年后的轨道,我只想要一个接近真实的模型,它将演示:

  • 正确的椭圆轨道
  • 倾向
  • 动态变化速度(在近日点更快)
  • 我想知道是否有一种足够复杂的方法来计算给定t(动态变化)的行星的x,y,z,可能使用轨道元素


    希望,我把我的想法说清楚了。谢谢,也许你应该试试轨道的二维投影。在这种情况下,您只需将椭圆参数化为向量函数,如ɣ(x(t),y(t))

    然后为了应用物理方面,想象两个质量中心,太阳M和一个给定的行星μ。行星F上的力由F=GμM/|ɣ|²给出,加速度遵循牛顿第二定律a=GM/|ɣ|²,始终指向较大的质量M


    为了建立曲线ɣ,如果您对显示一些关键元素的近似值感到满意,那么您可以使用

    ,而不是尝试计算一个几年内所有行星的查找表。比如说,海王星的轨道周期是164年,因此计算这段时间内每个月所有行星的位置应该可以得到一个相对可控的比例表。要获得轨道速度变化的可视化表示,需要更高的分辨率。一旦计算完毕,您只需要构建一个动画来绘制位置

    计算相当复杂。我不打算在这里重复计算——它太长了——但您可以找到一个很好的描述,以及一个用QBasic编写的示例程序

    主要步骤是:

    找到行星在其轨道上的位置 -查找自元素日期起的天数 -从平均经度和每日运动中找出平均异常 -用中心方程求真异常 -求行星的半径向量

    参考黄道位置-因此找到行星的日心黄道坐标

    一旦你有了日心坐标,就可以将它们转换为你自己的参考系(链接页面显示了如何对地心坐标进行转换,但这没有用。你需要自己解决这个问题。)将坐标添加到你的表中

    您可以尝试实时运行计算,这将更加灵活,但可能会限制帧速率。这里可能需要一些实验


    感谢Keith Burnett(链接页面的作者)对我已经详述的细节。

    < P>这里有一些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;
    }
    
    double x=distanceFromSun*orbitScaleFactor;
    双y=sin(倾角)*与太阳的距离*轨道比例因子;
    双z=半极小*轨道比例因子;
    对于(双i=0;i<2.0*PI;i+=PI/32.0){
    x=cos(i)*x;
    y=cos(i+lonofascadingnode)*y;
    z=sin(i)*z;
    }
    
    虽然你的问题特别是指JavaScript,但我不觉得给你C++代码感到内疚。我认为这个等式是你真正想要的。 您可以在此处看到我的完整代码:


    您也可以在那里找到变量的信息。:)

    您尝试了什么?你已经说了你需要的。计算给定t的x,y,z。圆可以定义为满足方程x=r cos(t)y=r sin(t)的所有点的轨迹。我当前的代码看起来像mercury.position.x=20*Math.cos(t)+0;水星位置z=20*数学sin(t)+0;但是这些轨道只是圆,我想在模型中加入一些物理元素,我想可能有一个方程,使用轨道元素,更适合这个任务。你知道一件简单的事情可以解决所有问题:)你希望这个有多精确?美国宇航局使用基于牛顿引力的迭代过程计算轨道轨迹,但这对水星不起作用。如果你想要水星的精确性,你需要广义相对论——10个关联的偏微分方程和许多有效的解。或者你可以找到一本历书,画一次位置。当然不准确:)我想到的只是一般轨道运动原理的可视化。我不知道它是如此的复杂,包括轨道形状是我认为我可以做的,但是在近日点的速度让我感到困惑