Добрый день, я пытаюсь создать простую двухмерную модель солнечной системы в javascript, но у меня возникли некоторые проблемы с пониманием того, как перейти к вычислению, где планеты будут находиться в следующем кадре, а также к нескольким другим битам, которые я приведу подробности скоро.
После просмотра этого очень хорошего видео и множества других его фотографий я сделал быстрое MS-изображение для рисования, чтобы попытаться упростить мою ситуацию.
Во второй сцене вы можете видеть, что новая позиция вычисляется с использованием скорости, гравитационного притяжения и угла между этими двумя «направлениями»?
Я не могу понять, как все это понять.
Ниже приведена JS-скрипка моего кода. Вы заметите, что я стараюсь изо всех сил использовать реальные данные НАСА, чтобы сохранить их точность.
Вы хотите обратить особое внимание на строки 138, в которых производятся все вычисления для его следующего хода.
https://jsfiddle.net/c8eru7mk/9/
attraction: function(p2) {
// Distance to other body
var dx = p2.position.x - this.position.x;
var dy = p2.position.y - this.position.y;
var d = Math.sqrt(dx ** 2 + dy ** 2); // Possibly correct
// Force of attracrtion
this.f = G * (this.mass * p2.mass) / (d ** 2); // Possibly Correct
// Direction of force, If you read it hard enough you should be able to hear my screams of pain
// Not sure if this is correct, most likely not.
var theta = Math.atan2(dy, dx);
var fx = Math.cos(theta) * this.f;
var fy = Math.sin(theta) * this.f;
this.velocity.x += fx / this.mass;
this.velocity.y += fy / this.mass;
this.position.x += this.velocity.x;
this.position.y += this.velocity.y;
}
Проблемы, с которыми я сейчас сталкиваюсь:
- Если я собираюсь использовать значения НАСА, расстояние между планетами настолько велико, что они не поместятся на экране, и я не могу просто уменьшить расстояния, умножив их на 0,0002 или что-то еще, поскольку это связывайтесь с гравитационной постоянной, и симуляция будет полностью отключена.
- Я не знаю, как рассчитать следующую позицию, и мой мозг несколько раз взорвался на прошлой неделе, пытаясь сделать это несколько раз.
- Я понятия не имею, как проверить, неверны ли мои данные конфигурации планет или симуляция неправильная, так что я почти догадываюсь.
Это также мой первый раз, когда я на самом деле кодирую что-то более сложное, чем кнопка в javascript, так что отзывы о компоновке кода и прочее приветствуются!
Большое спасибо