Моделирование движения упругого маятника в ImGui C++

В следующей статье определяется уравнение движения массы, подвешенной на пружине. Уравнения (дифференциальные уравнения) решаются методом Рунге-Кутца, о котором я рассказывал в одной из своих бесценных статей. Уравнения движения решаются во время моделирования. Решение (состояние системы) генерируется на каждом шаге моделирования.

Динамическую систему, которую мы собираемся смоделировать, нельзя рассматривать как расширение вертикальной системы пружина-масса с гравитацией.
Упругий маятник, или пружинный маятник, представляет собой физическую систему, в которой масса соединена с пружиной. Масса может двигаться в 2D (в целях моделирования).

Движение системы состоит из простого маятника и одномерной системы пружины и массы. См. ниже модель системы.
Движение обсуждаемого маятника классифицируется как хаотическое, а движение системы/массы сильно определяется начальными условиями.
Движение упругого маятника мы описываем с помощью связанных обыкновенных дифференциальных уравнений (уравнений Лагранжа) которую я решил с помощью метода Рунге-Кутты.
Математические детали обсуждаемой системы вы найдете в моей предыдущей статье.

Пожалуйста, рассмотрите движение массы и то, как начальные условия влияют на движение массы. Небольшая разница в начальных условиях влияет на значительные изменения в поведении всей системы (свойство хаотической системы).

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

Реализацию решения я развернул на C++ с визуализацией в ImGui. Знакомство с C++ ImGui и информацию о компиляции и сборке программ вы найдете в одной из моих предыдущих статей.

Исходный код вы найдете на моем GitHub.

Спасибо за чтение.