Нелогичное продолжение моей старой статьи Рисуем интерференционную картину на JavaScript.

Забавы ради появилась идея сделать анимацию движения планет. Чтобы далеко не отходить от станка решено все было сделать в браузере на JavaScript.

Первая версия была про солнечную систему: планеты, Солнце, масштаб. Скучно!

Затем вспомнился научно-познавательный фильм про раннюю однородную Вселенную, в которой происходили флуктуации, вызывающие образование сгустков материи. В фильме приводилась анимация с шариками, которые висели в сетке. Решено было повторить, но "чуть" проще - с 16 шариками.

А теперь сделаем небольшую магию: рассчитаем силу тяготения между всеми шариками, вычислим результирующий вектор, силу и ускорение. В нашем примере все предсказуемо и без вычислений: шары полетят к центру.

А так как в моей модели у нас шарики не сталкиваются друг с другом, то они, набрав скорость, пролетают центр масс.

Дальше они несколько раз пролетают через центр масс и начинают набирать ошибку вычисления и улетают в "космос".

Самое забавное - наблюдать за тем, как шарики начинают вращаться вокруг общего центра масс. Еще очень крутой эффект - это гравитационная праща, думаю, вам повезет его увидеть, когда шарик пролетает между группой других шариков и разгоняется, уходя за горизонт/экран.

В конце концов получается хаотическая картинка, что была в начале статьи.

Обязательно сходите и сами поэкспериментируйте в песочнице https://jsfiddle.net/gf4wc0yq/3/. Код прост и не использует фреймворки (но проверялся только в Google Chrome под Ubuntu).

Что вы можете доработать в модели:

  1. Учет веса;

  2. Расчет столкновений, поглощение шариков друг другом и переход части кинетической энергии в тепловую;

  3. Заранее определенные скорости и углы (например, для генерации простой модели трех тел);

Делитесь в комментариях своими находками.

Комментарии (9)


  1. Naf2000
    27.09.2022 09:53
    +5

    Еще в школе делал на turbo pascal 6 c этими вот egavga.bgi на 286 машинке. Правда без таких визуальных эффектов. На каждом такте у каждого шарика рассчитывались вектора сил тяжести к остальным (с у четом масс), на их основе приращение скорости, потом приращение координат, потом перерисовка. Поначалу надо было подобрать вектора скоростей, чтобы все не разлеталось и не упало в центр.


    1. IvanPetrof
      27.09.2022 10:19
      +4

      А у меня была потрёпанная книжка про конструирование космических аппаратов, и там была табличка с параметрами планет солнечной системы (масса, диаметр орбиты и орбитальная скорость). Тоже на турбо паскале написал подобный же движок и воочию убедился, что всё летает и не падает (включая Луну).
      А ещё, в этой книжке была чб панорамная фотка венерианской поверхности, снятая камерой одного из спускаемых аппаратов. Т.к. Интернетов тогда никаких небыло, а в телевизоре было 2.5 канала, эта фотка для меня была как артефакт из параллельного мира ))


  1. Sabirman
    27.09.2022 13:01

    В dos-игрушке f19 расчет гравитации тоже делался таким способом. В результате из-за накапливаемой ошибки можно было летать совсем без топлива регулярно делая горки


  1. VaalKIA
    27.09.2022 13:41
    +1

    "Что вы можете доработать в модели: "

    Раз уж речь идёт о планетах, то, конечно, скорость распространения гравитации, и тогда бы, получилась нормальная статья, а не это вот всё..


    1. WondeRu Автор
      27.09.2022 15:14

      Так речь как раз не про планеты, это было озвучено. Планеты гораздо интереснее и сложнее, чем просто точки с гравитацией.


    1. Naf2000
      27.09.2022 20:22

      Скорость распространения гравитации это уже какие-то галактики


  1. ivan386
    27.09.2022 21:15
    +2

    Несколько лет назат делал такую же штуку используя SVG.


    Большая картинка

    Гравитация


    Если картинку открыть частицы начнут двигаться. Формулы максимально упростил. Обнаружил что можно двигатся не только вперёд во времени но и назат.


    Так можно задать положение частиц. Открутить время назат а потом пустить вперёд и они вернутся в изначальное положение.


  1. perfect_genius
    27.09.2022 21:47
    +1

    Когда-то делал игру, где есть оружие с самонаводящимися пулями. Каково было моё удивление, когда я попытался уклониться от таких пуль и они закружились вокруг меня по орбите. Если рассчитать момент, то кружатся очень долго пока не упадут или не улетят.


  1. agat000
    28.09.2022 10:50

    Есть еще такой сайт , посмотрите, может почерпнете что то интересное для своего. У меня он для релакса используется.