美文网首页
地球绕太阳运行模拟

地球绕太阳运行模拟

作者: CODERLIHAO | 来源:发表于2020-07-14 18:36 被阅读0次
2020-07-14 18.35.21.gif

质量为m的地球的动能


地球动能

质量为m的相对太阳的引力势能
设太阳的质量为M,其无穷远处的势能为零点,当质量为m的物体从无穷远处移动到太阳r处时,引力做功


引力做功

从无穷远处来到r处,引力势能变化


引力势能变化

所以r处的引力势能为


引力势能

我们此时知道了地球的引力势能与动能,使用拉格朗日函数


拉格朗日函数

找到r的关系

image.png

解出来就是


image.png

找到θ的关系

因为θ与L没有关系,所以偏导数就是0


image.png

计算r的加速度

距离的二阶导数就是加速度

 function calculateDistanceAcceleration(state) {
      `  // [acceleration of distance] = [distance][angular velocity]^2 - G * M / [distance]^2
      return state.distance.value * Math.pow(state.angle.speed, 2) -
                    (constants.gravitationalConstant * state.massOfTheSunKg) / Math.pow(state.distance.value, 2);
}

计算角度θ的加速度

function calculateAngleAcceleration(state) {
     // [acceleration of angle] = - 2[speed][angular velocity] / [distance]
    return -2.0 * state.distance.speed * state.angle.speed / state.distance.value;
 }

接下来使用欧拉法预测数据,deltaT是一个微小的量,derivative是时间的导数

 function newValue(currentValue, deltaT, derivative) {
      return currentValue + deltaT * derivative;
 }

计算距离r

 var distanceAcceleration = calculateDistanceAcceleration(state);
 state.distance.speed = newValue(state.distance.speed, deltaT, distanceAcceleration);
 state.distance.value = newValue(state.distance.value, deltaT, state.distance.speed);

计算角度θ

  var angleAcceleration = calculateAngleAcceleration(state);
  state.angle.speed = newValue(state.angle.speed, deltaT, angleAcceleration);
  state.angle.value = newValue(state.angle.value, deltaT, state.angle.speed);

计算地球位置

function calculateEarthPosition(distance, angle) {
         middleX = Math.floor(canvas.width / 2);
         middleY = Math.floor(canvas.height / 2);
         var centerX = Math.cos(angle) * distance + middleX;
         var centerY = Math.sin(-angle) * distance + middleY;
          return {
                    x: centerX,
                    y: centerY
                };
 }

参考https://evgenii.com/blog/earth-orbit-simulation/

相关文章

网友评论

      本文标题:地球绕太阳运行模拟

      本文链接:https://www.haomeiwen.com/subject/riufhktx.html