Двойной маятник в 100 строках JavaScript


Иногда лучше вернуться к основам. Здесь у нас есть симуляция двойного маятника без следов физического движка. И все это укладывается в 100 строк JavaScript.

Двойной маятник интересен тем, что это простая физическая система с удивительно сложным поведением. Он демонстрирует чувствительность к начальным условиям и, следовательно, может считаться хаотичным для некоторых начальных конфигураций.

Микаэль Оливейра создал physics-sandbox с идеей создать несколько демо-версий физики, и первой из них стал двойной маятник, который в упрощенном виде вы можете увидеть ниже.

С точки зрения хаоса интересно то, как часто нижний маятник делает полную петлю. Очень трудно предсказать, произойдет ли петля или когда она произойдет — поэтому во время наблюдения следите за петлей, которая вот-вот произойдет.

Если вы хотите узнать теорию, зайдите на веб-страницу Микаэля с ее объяснением. Он использует подход Лагранжа, и после разработки Лагранжа и подстановки его в уравнения движения, в итоге получается нечто, что выглядит ужасно. Уравнения дают угловое ускорение как функцию углового положения и скорости.

Сила программирования в том, что даже если вы не можете найти замкнутую форму для положения как функции времени, вы можете смоделировать систему. В этом случае не требуется ничего, кроме базового метода Эйлера; новое положение — это старое положение плюс соответствующая скорость, умноженная на шаг по времени, а новая скорость — это старая скорость, умноженная на соответствующее ускорение, умноженное на шаг по времени. Это прямое физическое моделирование, но оно кажется достаточно стабильным, если размер шага мал.

двойной хаос JavaScript

Источник: Георгий Иоаннидис

Двойной маятник, демонстрирующий хаотическую динамику — конец маятника отслеживается светодиодом.

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

Кто-нибудь хочет попробовать это в Box2D?

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

Код находится на GitHub.


Добавить комментарий