Моделирование орбиты Земли имеет неверную скорость - PullRequest
8 голосов
/ 04 марта 2020

Я очень новичок в программировании, и я получил школьное задание, для которого мне нужно создать симуляцию орбиты Земли вокруг Солнца в p5. js. Нам предложили упрощенный способ вычисления гравитационного притяжения, но я хотел использовать фактическую формулу (Fg = G M m / r ^ 2). В моем коде один пиксель равен 10 ^ 9 метрам или миллиону км. Если я использую фактические массы Солнца и Земли, а также фактическое расстояние между ними, я должен указать скорость, с которой Земля движется со скоростью примерно 1 пиксель в секунду или миллион км / с, что составляет около 30000 раз больше фактической скорости Земли на орбите. Мой код:

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);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.0.0/p5.min.js"></script>

Вы знаете, в чем причина? Заранее спасибо.

1 Ответ

4 голосов
/ 09 марта 2020

У вас, кажется, есть ускорение в метрах в секунду 2 и скорость в пикселях в секунду. Затем вы объединяете их:

vy += ay * dt;
vx += ax * dt;

Ваши гравитационные ускорения в миллиард раз сильнее. Таким образом, ваш pl anet должен двигаться примерно в 31 623 раза быстрее, чем обычно, чтобы сохранять круговую орбиту.

...