地球轨道模拟速度不正确

Gij*_*fwb 8 javascript simulation physics p5.js

我对编程非常陌生,我收到了一份学校作业,我必须在 p5.js 中创建一个模拟地球绕太阳运行的轨道。我们得到了一种计算引力的简化方法,但我想使用实际公式(Fg = G M m/r^2)。在我的代码中,一个像素等于 10^9 米或一百万公里。如果我使用太阳和地球的实际质量,以及它们之间的实际距离,我必须把地球移动的速度大约为每秒 1 个像素或 100 万公里/秒,大约是是地球在轨道上实际速度的 30,000 倍。我的代码:

x = 550;
y = 400;
vy = -1;
vx = 0;
dt = 1;
sunSize = 80;
planetSize = 10;
// 1 pixel equals 1 million km
canvasSize = 800;
starAmount = 600;

function setup() {
  frameRate(60);
  noStroke()
  solarXY = 0.5 * canvasSize;
  xSun = solarXY;
  ySun = solarXY;
  createCanvas(canvasSize, canvasSize);
  M = 1.989 * pow(10, 30);
  m = 5.972 * pow(10, 24);
  background(0);
  for (i = 0; i < starAmount; i++) {
    starX = Math.random() * canvasSize;
    starY = Math.random() * canvasSize;
    starSize = Math.random() * 3 + 1
    ellipse(starX, starY, starSize, starSize);
  }
  fill(255, 192, 0);
  ellipse(xSun, ySun, sunSize, sunSize);
}

function draw() {
  r = sqrt(sq(xSun - x) + sq(ySun - y)) * pow(10, 9);
  Fg = 6.67 * pow(10, -11) * m * M / sq(r);
  if (x >= xSun) {
    angle = atan((ySun - y) / (x - xSun));
  } else {
    angle = PI + atan((ySun - y) / (x - xSun));
  }
  xOld = x;
  yOld = y;
  Fgx = cos(angle) * Fg
  Fgy = sin(angle) * Fg
  ay = Fgy / m;
  ax = -Fgx / m;
  vy += ay * dt;
  vx += ax * dt;
  y += vy * dt;
  x += vx * dt;
  fill(30);
  ellipse(xOld, yOld, planetSize, planetSize);
  fill(0, 0, 192);
  ellipse(x, y, planetSize, planetSize);
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

你知道可能是什么原因吗?提前致谢。

Bet*_*eta 6

您的加速度似乎以米每秒2为单位,速度以像素每秒为单位。然后你将它们组合起来:

vy += ay * dt;
vx += ax * dt;
Run Code Online (Sandbox Code Playgroud)

你们的重力加速度强了十亿倍。因此,你的行星必须以比正常速度快 31,623 倍的速度才能保持圆形轨道。