Физика Человека-паука с его новыми паутинными крыльями

в 16:26, , рубрики: python, научная фантастика, Научно-популярное, планирование, физика, человек-паук, числовые модели, метки:

Врать не буду, я очень жду фильм «Человек-паук: Возвращение домой» [Spider-Man: Homecoming]. А пока что единственной отдушиной для меня будет заняться физикой Человека-паука. И я займусь его новыми паутинными крыльями, увиденными в последнем трейлере.

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

Физика планирования

Что случится после прыжка Человека-паука со здания? Я могу смоделировать его движение, приняв, что на него действуют три силы – гравитация, сопротивление воздуха и подъёмная сила. С вашего позволения, я опишу каждую из них.

• Гравитация – постоянная, направленная вниз сила, пропорциональная массе ЧП (на поверхности Земли, по крайней мере).
• Сопротивление. Представьте, что вы тянете объект через гигантское море шариков для пинг-понга. Замените шарики воздухом – и будет примерно то же самое. Сопротивление увеличивается вместе со скоростью.
• Подъёмная сила. Опять-таки представьте столкновения с шариками, но такие, после которых шарики отскакивают вниз. Заменив шарики воздухом, вы получите подъёмную силу, зависящую от угла атаки, поверхности и скорости.

Вот вам красивая диаграмма сил планирующего на крыльях ЧП. Да, пока мы смоделируем его при помощи треугольника.

image

В нашей простой модели подъёмная сила перпендикулярна скорости, а сопротивление направлено в противоположную ей сторону. Для моделирования движения ЧП с крыльями, мне нужна формула для них обеих.

image

Это величины важных нам сил. Они похожи, за исключением CL (подъёмного коэффициента) и CD (коэффициента сопротивления). В обоих случаях ρ это плотность воздуха (1,2 кг/м3), а v – скорость.

Что есть А? Это площадь поперечного сечения человека (ЧП в нашем случае). По идее, А для сопротивления и для подъёмной силы должны отличаться, в зависимости от угла атаки. Но я не всегда точно знаю, что я делаю – поэтому я сверился с разными источниками, и больше всего к моему случаю подходит статья 2011 года "Траектория падающего Бэтмена" из физического журнала Journal of Physics Special Topics. В ней авторы использовали одну и ту же площадь для сопротивления и подъёмной силы, так что я сделаю то же самое.

Моделирование траектории

Если ЧП спрыгнет со здания, как далеко он сможет сместиться в падении? Какую разницу дадут ему паутинные крылья? Моделировать движение ЧП не так уж просто, поскольку сопротивление и подъёмная сила зависят от скорости. Такую траекторию можно рассчитать только при использовании числовой модели, в которой движение разбивается на небольшие шаги.

Займёмся аппроксимацией. Сначала посчитаем площадь поверхности ЧП. Грубо прикинув, я получил:

image

Что даёт нам площадь около 0,651 м2 с крыльями и 0,513 м2 без них. Остальные значения:
• Подъёмный коэффициент = 1,45 (значение взято из работы о Бэтмене)
• Коэффициент сопротивления = 0,4 (оттуда же)
• Масса = 64 кг
• Начальная скорость = 8 м/с (горизонтальная)
• И ещё одно предположение: постоянный угол атаки, в связи с чем коэффициенты сопротивления и подъёма не меняются.

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

GlowScript 2.1 VPython
#this is the area with the wings
A1=0.651

#area without wings
A2=0.513

g=vector(0,-9.8,0)

m=64 #mass of Spider-Man

CL=1.45 #coefficient of lift
CD=0.4 #coefficient of drag
rho=1.2 #density of air

#starting velocity 
#try changning this
v0=8
#starting momentum assuming horizontal - change this
p=vector(v0,0,0)*m
#p2 is just the momentum for the comparison
p2=p

t=0
dt=0.01

#starting height
h=40
#starting position
r=vector(0,h,0)
r2=r

#these are for the graphs
f1=series(color=color.red)
f2=series(color=color.blue)

while r.y>0:
    #calculate the velocity to use in lift-drag
    v=p/m
    v2=p2/m
    
    #calculate the drag force
    Fd=-.5*rho*A1*CD*(mag(v)**2)*norm(v)
    Fd2=-.5*rho*A2*CD*(mag(v2)**2)*norm(v2)
    
    #calculate lift (notice cross product to get direction)
    FL=-.5*rho*A1*CL*(mag(v)**2)*cross(norm(v),vector(0,0,1))
    FL2=-.5*rho*A2*CL*(mag(v2)**2)*cross(norm(v2),vector(0,0,1))
    
    #total force
    F=m*g+Fd+FL
    F2=m*g+Fd2+FL2
    
    #update momentum
    p=p+F*dt
    p2=p2+F2*dt
    
    #update position
    r=r+p*dt/m
    r2=r2+p2*dt/m
    
    #update time
    t=t+dt
    
    #plot stuff
    #change this if it makes you happy
    f1.plot(r.x,r.y)
    f2.plot(r2.x,r2.y)

print("Glide Ratio 1 = ",-p.x/p.y)
print("Glide Ratio 2 = ", -p2.x/p2.y)

image

В моей модели красная линия представляет траекторию ЧП с крыльями, а голубая – без крыльев. Также я вывожу значение аэродинамического качества. Поскольку в конце он двигается с постоянной скоростью, это соотношение будет равняться просто отношению х-компоненты импульса, делённой на у-компоненту.

Домашнее заданее

Для ответа на следующие вопросы используйте эту числовую модель. Не волнуйтесь, вы ничего не сломаете. Если что-то сделаете с кодом, просто перезагрузите и начните сначала.
Согласно Википедии, у прыгающего в крылатом костюме парашютиста аэродинамическое качество (отношение подъёмной силы к лобовому сопротивлению) имеет значение порядка 2,5:1 (то есть, наша программа вывела бы число 2,5). Сможете ли вы так подправить код, чтобы программа выдала такое значение? Подсказка: меняйте как площадь поверхности, так и начальную скорость.
• Что, если ЧП упадёт вертикально вниз? Какую предельную скорость он приобретёт с крыльями, и без них?
• Как быстро ЧП нужно двигаться по горизонтали, чтобы он полетел вверх, а не вниз, в начале полёта?
• Может ли ЧП прыгнуть, целясь вниз, так, чтобы набрать большую скорость и на какое-то время перейти в горизонтальный полёт?
• Можете ли вы построить улучшенную модель, принимающую во внимание угол атаки? Возможно, и сможете, но мне кажется, что полёты с малой скоростью – достаточно сложная тема.

Автор: SLY_G

Источник

Поделиться

* - обязательные к заполнению поля