Нелогичное продолжение моей старой статьи Рисуем интерференционную картину на JavaScript.
Забавы ради появилась идея сделать анимацию движения планет. Чтобы далеко не отходить от станка решено все было сделать в браузере на JavaScript.
Первая версия была про солнечную систему: планеты, Солнце, масштаб. Скучно!
Затем вспомнился научно-познавательный фильм про раннюю однородную Вселенную, в которой происходили флуктуации, вызывающие образование сгустков материи. В фильме приводилась анимация с шариками, которые висели в сетке. Решено было повторить, но "чуть" проще - с 16 шариками.
А теперь сделаем небольшую магию: рассчитаем силу тяготения между всеми шариками, вычислим результирующий вектор, силу и ускорение. В нашем примере все предсказуемо и без вычислений: шары полетят к центру.
А так как в моей модели у нас шарики не сталкиваются друг с другом, то они, набрав скорость, пролетают центр масс.
Дальше они несколько раз пролетают через центр масс и начинают набирать ошибку вычисления и улетают в "космос".
Самое забавное - наблюдать за тем, как шарики начинают вращаться вокруг общего центра масс. Еще очень крутой эффект - это гравитационная праща, думаю, вам повезет его увидеть, когда шарик пролетает между группой других шариков и разгоняется, уходя за горизонт/экран.
В конце концов получается хаотическая картинка, что была в начале статьи.
Обязательно сходите и сами поэкспериментируйте в песочнице https://jsfiddle.net/gf4wc0yq/3/. Код прост и не использует фреймворки (но проверялся только в Google Chrome под Ubuntu).
Что вы можете доработать в модели:
Учет веса;
Расчет столкновений, поглощение шариков друг другом и переход части кинетической энергии в тепловую;
Заранее определенные скорости и углы (например, для генерации простой модели трех тел);
Делитесь в комментариях своими находками.