地球绕太阳运行模拟

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/

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值