Доброго времени суток! При просмотре экшн-фильмов (фильмов с хорошо продуманными динамичными сценами) иногда закрадывается в голову: а реально ли это в действительности? Например, мог ли автомобиль перевернуться на маленькой скорости, как быстро можно раскачаться на верёвке без начальной скорости над пропастью…
Что говорит на это физика? Интересно ли писать на бумажечке и потом хвастаться клочком с формулами и парой-тройкой векторов? Давайте сделаем это безопасно и наглядно.
Начнём с обычного математического маятника:
Кстати, даже если принимать синус за его аргумент, то эксперименты с измерением периода маятника дают хорошие результаты для g. Но нам, чтобы полюбоваться большими углами, надо честно решить уравнение, особенно если scipy такую возможность предоставляет.
Разделим уравнение на два первого порядка и запишем в стандартном виде
И теперь смело это кормим нашему змею (подробнее об scipy.integrate.odeint, увы, в оригинале).
На первом курсе в лаборатории механики были маятники, возможности каждого из них почти исчерпывало задание к работе. Авот с одним было что-то не то, потому что так было нельзя больше всего привлекал внимание маятник Обербека: «Что будет, если не закрепить грузики?»
И вот спустя N лет я увидела в фильме (очередные пираты Карибского моря) что же произойдёт!
Хмммм а действительно ли это так? Для этого достаточно записать всего два уравнения, первое из которых записано в системе покоя направляющей лезвия с учётом переносного и ускорения Кориолиса.
Куда делась масса гильотины? Как и в большинстве задачек без трения она была и справа, и слева от равенства, и ни на что не влияет.
Наслаждаемся результатами:
Если начальная скорость велика, то этот «аттракцион» безопасен после прохождения горизонтального положения.
P.S. здесь начала копать.
P.S.S. поигравшись с начальными параметрами (для маленьких углов отклонения от вертикали или небольших начальных угловых скоростей) можно прийти к «плоскому» пониманию устойчивости гироскопов.
А лучше будем добрыми и не попадать под гильотины!
Что говорит на это физика? Интересно ли писать на бумажечке и потом хвастаться клочком с формулами и парой-тройкой векторов? Давайте сделаем это безопасно и наглядно.
Начнём с обычного математического маятника:
Кстати, даже если принимать синус за его аргумент, то эксперименты с измерением периода маятника дают хорошие результаты для g. Но нам, чтобы полюбоваться большими углами, надо честно решить уравнение, особенно если scipy такую возможность предоставляет.
Разделим уравнение на два первого порядка и запишем в стандартном виде
И теперь смело это кормим нашему змею (подробнее об scipy.integrate.odeint, увы, в оригинале).
t = linspace(0,15,100)
G = 9.8
L = 1.0
def diffeq(state, t):
th, w = state
return [w, -G/L*sin(th)]
dt = 0.05
t = np.arange(0.0, 20, dt)
th1 = 179.0
w1 = 0.0
state = np.radians([th1, w1])
y = odeint(diffeq, state, t)
На первом курсе в лаборатории механики были маятники, возможности каждого из них почти исчерпывало задание к работе. А
И вот спустя N лет я увидела в фильме (очередные пираты Карибского моря) что же произойдёт!
Хмммм а действительно ли это так? Для этого достаточно записать всего два уравнения, первое из которых записано в системе покоя направляющей лезвия с учётом переносного и ускорения Кориолиса.
Куда делась масса гильотины? Как и в большинстве задачек без трения она была и справа, и слева от равенства, и ни на что не влияет.
Наслаждаемся результатами:
Если начальная скорость велика, то этот «аттракцион» безопасен после прохождения горизонтального положения.
import matplotlib.animation as animation
from pylab import *
from scipy.integrate import *
import matplotlib.pyplot as plt
t = linspace(0,15,100)
G = 9.8
L = 10.0
def derivs(state, t):
th, w, r, v = state
if 0.<r<L or w**2*r>G*cos(th):
return [w, -G/r*sin(th), -v, (-w**2*r-G*cos(th)-G*sin(th)-2*w*v)]
elif w**2*r<G*cos(th):
return [w,-G/r*sin(th),-v, w**2*r-G*cos(th)]
return [w,-G/r*sin(th), 0,0]
dt = 0.01
t = np.arange(0.0, 20, dt)
th1 = 180.0
w1 = 50.
r1 = L*0.9
v1 = 0.0
state = np.radians([th1, w1])
state = np.append(state, [r1, v1])
y = odeint(derivs, state, t)
x1 = L*sin(y[:, 0])
y1 = -L*cos(y[:, 0])
x2 = (y[:,2].clip(min = 0, max = L))*sin(y[:, 0])
y2 = -(y[:,2].clip(min = 0, max = L))*cos(y[:, 0])
fig = plt.figure()
ax = fig.add_subplot(111, autoscale_on=False, xlim=(-L-0.2, L+0.2), ylim=(-L-0.2, L+0.2))
ax.grid()
line, = ax.plot([], [], '-', lw=2)
point, = ax.plot(0,0,'o', lw=2)
extra, = ax.plot(x1/L*r1,y1/L*r1,'o', lw=2)
time_template = 'time = %.1fs'
time_text = ax.text(0.05, 0.9, '', transform=ax.transAxes)
def init():
line.set_data([], [])
point.set_data(0,0)
time_text.set_text('')
extra.set_data(x1/L*r1,y1/L*r1)
return line, time_text, point, extra
def animate(i):
thisx = [0, x1[i]]
thisy = [0, y1[i]]
thisx2 = x2[i]
thisy2 = y2[i]
point.set_data(thisx[0],thisy[0])
line.set_data(thisx, thisy)
time_text.set_text(time_template % (i*dt))
extra.set_data([thisx2,thisy2])
return line, time_text, point, extra
ani = animation.FuncAnimation(fig, animate, np.arange(1, len(y)),
interval=25, blit=True, init_func=init, repeat = False)
show()
P.S. здесь начала копать.
P.S.S. поигравшись с начальными параметрами (для маленьких углов отклонения от вертикали или небольших начальных угловых скоростей) можно прийти к «плоскому» пониманию устойчивости гироскопов.
А лучше будем добрыми и не попадать под гильотины!
Поделиться с друзьями
windgrace
Второе уравнение для «гильотины» вызывает сомнения — левая часть имеет размерность с-2, а правая — м2/c2 (обратная секунда в квадрате и скорость в квадрате, соответственно; хабр пока не понимает LaTeX в комментах).
Было бы интересно ещё посмотреть на зависимость от начальных данных — думаю, если задать достаточно большую угловую скорость вращения, то оранжевая точка так и будет крутиться на максимально возможном расстоянии от оси.
encyclopedist
Проблема с размерностями начинается с самого первого уравнения в статье.
Arastas
Это которое сразу после слов "математического маятника"? Не вижу там проблем кроме того, что величина E не определена.
encyclopedist
У первого члена размерность
кг/с^2
, у второго —кг*(м/с^2)*м = кг*м^2/с^2
. Первый член должен бы выражать кинетическую энергию(m*v^2)/2
, но скорость грузика это (радиус * производная угла), а не просто (производная угла).Arastas
Согласен. Я, с чего-то, решил, что тетта в метрах, а не в радианах. :)
windgrace
Вы правы, проглядел.
ventosa
Исправила, протестировала программу — лезвие стало медленнее сползать.
windgrace
Всё равно сомневаюсь во втором уравнении, слагаемого от силы Кориолиса нет. Там должно быть что-то вроде $r \theta '' = — 2r'\theta' — \frac gr \sin\theta$.
ventosa
Как ни странно, вращение только ускоряет лезвие.
windgrace
А почему странно? Сильно раскрутили — центробежной силой унесло на максимально возможный радиус. Если кинетической энергии хватит, то там гильотина и останется.
windgrace
А вот если ускоряет время казни, то это, согласен, странновато.
encyclopedist
Попробуйте нарисовать траекторию лезвия. А ещё, напишите пожалуйста, откуда и в какую сторону отсчитываются ваши переменные.
ventosa
Ноль тета — это вертикально вниз, и положительные углы отсчитываются против часовой.
encyclopedist
Если я правильно понял и ноль тета — это вертикально вверх и увеличивается по часовой стрелке, то второе уравнение в последней системе неверное. Рассмотрите маленькое положительное тета. Гравитация должна сообщать момент по часовой стрелке, то есть положительный. А у вас он отрицательный.
Ну и вообще эту задачу проще всего решать не так. А разбить её на 2 части: Когда лезвие прижато к дальнему концу — решать через уравнение маятника. Найти точку, где лезвие оторвется. После этого лезвие находится в свободном педении (вы же считаете что у рамы гильотины нет массы). И нужно просто посчитать падение по параболе (в обычных декартовых координатах).
ventosa
Уравнение маятника взято из первой части и анимации походили на действительность.
Если перейти в систему отчёта, связанную с направляющими лезвия, то появится переносное ускорение [w[wr]]+[w' r] и Кориолиса 2[wv]. Тогда второе уравнение будет \ddot{r} = \dot{\theta}^2r-g \ cos \ \theta — w^2r — \dot{w}r — 2 wv (правильные ли знаки?), где r — расстояние от центра.
Как только разберусь с обработкой отрыва лезвия — исправлю статью.