Смоделируйте динамику движущихся бильярдных мячей

В этом примере показано, как смоделировать начало бильярдной игры при помощи матричных переменных непрерывного времени. В модели график Stateflow® симулирует динамику гибридной системы, которая имеет большое количество разрывов. Для получения дополнительной информации смотрите, что Непрерывное время Моделирует в Stateflow.

Когда симуляция запускается, пользовательский интерфейс (UI) MATLAB® показывает бильярдный стол с 15 бильярдными мячами, расположенными в треугольной стойке. Пользовательский интерфейс затем предлагает вам выбирать исходное положение и скорость бильярдного шара. Когда бильярдный шар выпущен, пользовательский интерфейс анимирует движение бильярдных мячей, когда они подвергаются последовательности быстрых столкновений.

Модель состоит из:

  • Init диаграммы Stateflow, который вызывает функциональный sf_pool_plotter.m инициализировать положение и скорость бильярдного шара на основе входа от пользовательского интерфейса.

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

  • График блока MATLAB function, который вызывает функциональный sf_pool_plotter.m анимировать движение бильярдных мячей во время симуляции.

  • Vel блока Scope, который отображает скорость каждого бильярдного мяча во время начала.

Вычислите динамику непрерывного времени

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

Переменные непрерывного времени

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

$$
\left\{ \begin{array}{ll}
\dot{\mathbf{p}} = \mathbf{v} \\
\dot{\mathbf{v}} = \mathbf{F}_\mathrm{friction} +
\mathbf{F}_\mathrm{interaction},
\end{array} \right.
$$

где$\mathbf{F}_\mathrm{friction}$ и$\mathbf{F}_\mathrm{interaction}$ силы, вызванные трением с бильярдным столом и столкновениями с другими мячами.

Чтобы отследить положения и скорости мячей, график хранит пару 16 2 матриц в переменных p непрерывного времени и v. В каждой матрице$i^\mathrm{th}$ строка представляет двумерное положение или скорость$i^\mathrm{th}$ мяча.

Модель трения

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

$$
\mathbf{F}_\mathrm{friction} =
\left\{ \begin{array}{ll}
-\mu g \displaystyle\frac{\mathbf{v}}{\|\mathbf{v}\|}
& \|\mathbf{v}\|>0 \\
0 & \mathrm{otherwise,}
\end{array} \right.
$$

то, где$\mu$ коэффициент трения и$g$ действительно ли ускорения, происходит из-за силы тяжести.

Динамика столкновения

Чтобы определить взаимодействия, вызванные столкновениями между мячами, график вызывает функцию MATLAB interactionForce. Эта функция реализует простую модель силы восстановления, когда два мяча вступают в контакт друг с другом. Сила взаимодействия между$i^\mathrm{th}$ и$j^\mathrm{th}$ мячи модальна:

$$&#xA;\mathbf{F}_{\mathrm{interaction}}(i,j) =&#xA;\left\{ \begin{array}{ll}&#xA;k_p (2R-\|\Delta \mathbf{p}\|)&#xA;\displaystyle\frac{\Delta \mathbf{p}}{\|\Delta \mathbf{p}\|}&#xA;- k_v\Delta \mathbf{v} &#38; \|\Delta \mathbf{p}\| < 2R \\&#xA;0 &#38; \mathrm{otherwise,}&#xA;\end{array} \right.&#xA;$$

где:

  • $R$ радиус каждого мяча.

  • $k_p$ и$k_v$ константы эластичности.

  • $\Delta \mathbf{p} = \mathbf{p}_i - \mathbf{p}_j$ относительное разделение центров этих двух мячей.

  • $\Delta \mathbf{v} = \mathbf{v}_i - \mathbf{v}_j$ относительная разница в скорости между этими двумя мячами.

Поскольку мячи свободны перемещаться в двух измерениях, график использует 16 16 Булеву матрицу ball_interaction с учетом всех потенциальных столкновений. Например, когда$i^\mathrm{th}$ и$j^\mathrm{th}$ мячи затрагивают, значение ball_interaction(i,j) true. В противном случае этим значением является false. Поскольку столкновения симметричны по своей природе, график использует только верхний треугольный фрагмент матрицы.

Выполните матричные вычисления в функциях MATLAB

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

  • initBalls инициализирует положение и скорость каждого мяча на бильярдном столе.

  • frictionForce вычисляет силу трения, действующую на каждый мяч.

  • interactionForce вычисляет силу взаимодействия, действующую на каждый мяч.

  • isAnyBallGoingToStop возвращает значение 1 если какой-либо мяч прекращает перемещаться. В противном случае функция возвращает значение 0.

  • hasBallInteractionChanged возвращает значение 1 если какие-либо взаимодействия мяча изменяются. В противном случае функция возвращает значение 0.

  • isAnyBallNewlyPocketed возвращает значение 1 если какой-либо мяч падает в кармане. В противном случае функция возвращает значение 0.

  • isAnyBallOutOfBounds возвращает значение true если какой-либо мяч находится вне контура бильярдного стола. В противном случае функция возвращает значение false.

  • nearHole возвращает значение true если мяч около кармана на бильярдном столе. В противном случае функция возвращает значение false.

  • getBallInteraction возвращает Булеву матрицу, которая задает, являются ли какие-либо мячи в контакте друг с другом.

  • updateStopFlags отслеживает, которых мячи прекратили перемещаться, и хранит результат в векторном stopped.

  • pocketNewBalls устанавливает скорость каждого присвоенного мяча к 0.

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

Просмотрите результаты симуляции

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

Чтобы задать начальную скорость бильярдного шара, кликните по различному месту на бильярдном столе.

Модель симулирует динамику системы и анимирует движение бильярдных мячей.

Чтобы остановить симуляцию, закройте пользовательский интерфейс.

Похожие темы