Нелогичное продолжение моей старой статьи Рисуем интерференционную картину на JavaScript.
Забавы ради появилась идея сделать анимацию движения планет. Чтобы далеко не отходить от станка решено все было сделать в браузере на JavaScript.
![](https://habrastorage.org/getpro/habr/upload_files/3f1/090/d29/3f1090d29cb7087515e7d89e381e4bc8.gif)
Первая версия была про солнечную систему: планеты, Солнце, масштаб. Скучно!
Затем вспомнился научно-познавательный фильм про раннюю однородную Вселенную, в которой происходили флуктуации, вызывающие образование сгустков материи. В фильме приводилась анимация с шариками, которые висели в сетке. Решено было повторить, но "чуть" проще - с 16 шариками.
![](https://habrastorage.org/getpro/habr/upload_files/cf7/e07/aa5/cf7e07aa5d3a4c951f59e65b6fb4bc42.png)
А теперь сделаем небольшую магию: рассчитаем силу тяготения между всеми шариками, вычислим результирующий вектор, силу и ускорение. В нашем примере все предсказуемо и без вычислений: шары полетят к центру.
![](https://habrastorage.org/getpro/habr/upload_files/966/183/0d1/9661830d179ba88c07618df65ecbd1af.jpg)
А так как в моей модели у нас шарики не сталкиваются друг с другом, то они, набрав скорость, пролетают центр масс.
![](https://habrastorage.org/getpro/habr/upload_files/3d9/786/5e1/3d97865e1ebbed09acf9e5c901003b38.jpg)
Дальше они несколько раз пролетают через центр масс и начинают набирать ошибку вычисления и улетают в "космос".
![](https://habrastorage.org/getpro/habr/upload_files/342/cb7/a5c/342cb7a5c7ec32d49080df26a317b8d8.png)
Самое забавное - наблюдать за тем, как шарики начинают вращаться вокруг общего центра масс. Еще очень крутой эффект - это гравитационная праща, думаю, вам повезет его увидеть, когда шарик пролетает между группой других шариков и разгоняется, уходя за горизонт/экран.
В конце концов получается хаотическая картинка, что была в начале статьи.
Обязательно сходите и сами поэкспериментируйте в песочнице https://jsfiddle.net/gf4wc0yq/3/. Код прост и не использует фреймворки (но проверялся только в Google Chrome под Ubuntu).
Что вы можете доработать в модели:
Учет веса;
Расчет столкновений, поглощение шариков друг другом и переход части кинетической энергии в тепловую;
Заранее определенные скорости и углы (например, для генерации простой модели трех тел);
Делитесь в комментариях своими находками.