Спасибо большое, уважаемые друзья
Someone,
Schwungrad.
Может быть получится раздобыть Matlab. Но я не учусь на мех-мате.
У меня, к Вам,
Schwungrad, возник вопрос по Matlab/Simulink + SimMechanics. Можно ли там самому создавать двухмерные детали желаемой формы, рельефа и задавать коэффициенты трения? Или там стандартный набор заранее предусмотренных механических деталей? Например, можно ли там смоделировать заводной механизм часов, состоящий из храповика и пружины? Или моделирование храповика там не предусмотрено?
Или можно смоделировать рельсу с зубчиками направленными в одну сторону, а поверх брусок с зубчиками в другую сторону?
Код:
____________
|____________|
/ / / / / / /
/ / / / / / / / / / / / /
-------------------------
Если этот брусок толкать вправо, то он скользит, а если влево, то сцепляется зубчиками и не скользит.
Например, сложное тело, описанное массивом частиц летит и вращается относительно некоторой инерциальной системы координат ИСО1 без соударения с другими телами. У центра масс тела вектор скорости
![$\vec{v}$ $\vec{v}$](https://dxdy-01.korotkov.co.uk/f/c/d/7/cd74c822d31d457e590f28706c11499d82.png)
постоянный.
Рассмотрим инерциальную систему отсчёта ИСО2 с тем же масштабом, что и у ИСО1, начало координат которой совпадает с центром масс тела. Скорость центра масс в ИСО2 равна 0. Вектор скорости каждой частицы
![$\vec{v}_{2i}$ $\vec{v}_{2i}$](https://dxdy-04.korotkov.co.uk/f/3/a/4/3a4c5c307cbb8e080cc22d512552748982.png)
.
Получается, что в ИСО1 вектор скорости каждой частицы
![$\vec{v}_i = \vec{v} + \vec{v}_{2i}$ $\vec{v}_i = \vec{v} + \vec{v}_{2i}$](https://dxdy-02.korotkov.co.uk/f/9/a/e/9aeb2282dd123918138aef777388980182.png)
.
Для твёрдого тела можно хранить координаты центра масс
![$\vec{M}$ $\vec{M}$](https://dxdy-01.korotkov.co.uk/f/c/f/6/cf62fea6266cf1ce1e55e165feb7bae182.png)
, суммарный импульс
![$\vec{P}$ $\vec{P}$](https://dxdy-04.korotkov.co.uk/f/3/2/4/324fae7053c0cd1c74c7dce88fc6ea7b82.png)
относительно ИСО1, суммарный момент импульса
![$\vec{J}$ $\vec{J}$](https://dxdy-01.korotkov.co.uk/f/c/6/d/c6dfda486bbaf24fa3ebd1e0bd82b16882.png)
относительно ИСО2 и кватернион
![$\vec{Q}$ $\vec{Q}$](https://dxdy-03.korotkov.co.uk/f/e/7/1/e7127863a569d13ef10b21a9fea877d082.png)
ориентации тела в пространстве. И хранить координаты частиц тела относительно ИСО2 без поворотов. А при расчётах, и отображении средствами OpenGL, умножать на матрицу поворота и сдвигать на нужный вектор.
Определить на C++ функцию
void Update(FLOAT dt)
{
...
}
dt - прирощение времени относительно предыдущего вызова Update. Например, если Update срабатывает каждые 0.001 секунд, то dt = 0.001. При реальной работе на компьютере dt не будет константой и будет тем меньше, чем мощнее компьютер.
Тогда задача ставится, найти новые значения
![$\vec{M}_{new}, \vec{P}_{new}, \vec{J}_{new}, \vec{Q}_{new}$ $\vec{M}_{new}, \vec{P}_{new}, \vec{J}_{new}, \vec{Q}_{new}$](https://dxdy-04.korotkov.co.uk/f/7/6/2/7625a8919a786e7329a611b2eb02227b82.png)
, зная предыдущие значения
![$\vec{M}, \vec{P}, \vec{J}, \vec{Q}$ $\vec{M}, \vec{P}, \vec{J}, \vec{Q}$](https://dxdy-03.korotkov.co.uk/f/e/4/8/e48fd60d18a1c0bebd2d0461e9ebc30682.png)
и величину dt.
Для сложных тел можно создавать специальные массивы частиц, описывающих их покрытие, например, покрытие треугольниками. Тогда, при столкновениях сложных 3-х мерных тел, нужно постараться максимально точно вычислить обмены импульсами и моментами импульсов, исходя из законов сохранения импульса и момента импульса, чтобы не получались инерциоиды, как в некоторых компьютерных играх.
Если выписать формулы для искомых величин, то нужно численно решать довольно сложные системы дифференциальных уравнений. Зато как интересно! И полезно вывести оценку роста погрешности вычислений с ростом dt. В идеале dt - бесконечно малая величина, характеризующая непрерывный процесс. Но обычные компьютеры ориентированы на дискретные алгоритмы, где dt уже совсем не бесконечно малая...
Размышляю, как эти дифференциальные уравнения лучше численно решать.