IS
Все эксперименты
в процессе

Orbit Sandbox — игрушечная гравитация в браузере

Бросайте тела, придавайте им скорость и смотрите, как n-body гравитация стягивает их в орбиты, пращи и столкновения. Маленький поклон Universe Sandbox.

лабораторная запись
Зачем делал

Universe Sandbox — моя «уютная» программа. Хотелось прощупать, сколько того самого удовольствия «потыкать вселенную» переживёт в 200-строчной canvas-игрушке с наивной гравитацией.

Что узнал

Наивная O(n²) гравитация спокойно тянет пару сотен тел на 60fps. Сложное тут не физика, а стабильный интегратор: обычный Эйлер взрывается, полу-неявный остаётся спокойным.

Где сломалось

На обычном Эйлере два близких тела набирают бесконечную энергию и улетают за экран. Смягчение расстояния (эпсилон, чтобы r никогда не обнулялся) плюс полу-неявная интеграция погасили этот «фейерверк».

Стек
Canvas 2DTypeScriptrequestAnimationFrame

Потыкай вселенную

Клик по пустому месту — бросить тело. Клик с протяжкой — запустить его со скоростью. Всё притягивает всё, поэтому маленькие скопления падают в орбиты, а промахи мимо превращаются в пращи.

живое демо
Демо загружается…

Этот эксперимент намеренно помечен wip: интегратор стабилен, но слияния тел при столкновении пока нет, а дальше хочу добавить массу-по-радиусу-протяжки. В этом и смысл лабораторной записи — показывать швы, а не прятать их.