AlienCowEatCake / deathloop

Виртуальная физическая лаборатория «Мёртвая петля»

Home Page:https://aliencoweatcake.github.io/deathloop/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Виртуальная физическая лаборатория «Мёртвая петля»

Цель проекта: разработать программный продукт, представляющий собой виртуальную физическую лабораторию, моделирующую движение шарика в «мёртвой петле» при различных начальных условиях

Язык программирования: C++

Фреймворк: Qt4 / Qt5 / Qt6

Лицензия: GNU GPL v3

В программе моделируется поведение шарика, который совершает «Мёртвую петлю», то есть катится по круговому сектору. В модели можно изменять: угол наклона начального сектора (по которому шар набирает скорость), его длину, радиус проходимой шаром окружности и радиус шара.

В программе выводятся графики:

  • скорость шара
  • угловая скорость шара
  • изменение высоты шара относительно нижней точки желоба

Модель

В рамках данного проекта мы моделируем движение шарика с качением без скольжения в «мёртвой петле», образованной прямоугольным желобом.

image

Траектория движения центра шарика при прохождении петли

  • β - угол наклона начального участка
  • L - длина начального участка петли
  • R - радиус петли
  • r - радиус шарика
  • α - текущий угол, с помощью которого задаём положение шарика

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

Поскольку мы имеем дело с качением, для решения задачи нам необходимо составить уравнение динамики вращательного движения твёрдого тела относительно оси вращения.

M=I*dω/dt

Необходимо вычислить момент инерции. Рассмотрим вращение шарика относительно неподвижной оси, совпадающей в данный момент времени с мгновенной осью вращения. Нам известен момент инерции шарика относительно оси, проходящей через центр масс. Поэтому мы можем воспользоваться теоремой Штейнера, если найдём расстояние между осями:

image

h=r/sqrt(2)

Поперечное сечение шарика и желоба

Вращение шарика при качении происходит вокруг оси, обозначенной пунктиром.

Воспользуемся теоремой Штейнера.

I=(2/5)mr^2+m*h^2

Теперь рассмотрим первый участок движения шарика:

Относительно данной оси в уравнении динамики вращательного движения твёрдого тела ненулевым является только момент силы тяжести.

M_gr=mgh*sin(β)

Мы можем вычислить характеристики шарика:

I*ε=M_gr -> ε=M_gr/I

a=εh, x=x_0+gt^2sin(β)cos(β)/3.6, y=y_0-gt^2sin(β)sin(β)/3.6, v_x=gtsin(β)cos(β)/1.8, v_y=gtsin(β)*sin(β)/1.8, v=sqrt(v_x^2+v_y^2)

На втором участке при расчёте углового ускорения шарика и мгновенного ускорения поступаем аналогично. Движение рассматриваем как движение по окружности (пунктир на рисунке соответствует траектории движения центра шарика).

Угол α изменяется от – β до 2π

x=(R-rsqrt(2))sin(α)+(Lcos(β)+Rsin(β)), y=-(R-r*sqrt(2))*cos(α)+R

a=(-5/9)gsin(α), ε_tr=a/(R-rsqrt(2)), y=-(R-rsqrt(2))*cos(α)+R

Так как α=f(ε(α),ω), найдём α при помощи метода Эйлера. Реализация его алгоритма находится непосредственно в коде.

v=ω*(R-r*sqrt(2))

Третий участок отличается от второго смещением по ещё одной оси координат (необходимо для движения именно по петле, а не по замкнутой окружности).

Движение по последнему участку:

x=Lcos(β)+Rsin(β)+v*t

Случай падения находим, если выполняется:

v^2/(R-r/2)<g*cos(α+π)

About

Виртуальная физическая лаборатория «Мёртвая петля»

https://aliencoweatcake.github.io/deathloop/

License:GNU General Public License v3.0


Languages

Language:C++ 77.7%Language:C 7.9%Language:HTML 4.7%Language:Shell 4.2%Language:QMake 1.7%Language:Objective-C++ 1.2%Language:Batchfile 1.0%Language:Python 0.9%Language:Makefile 0.4%Language:CSS 0.2%