Skip to content

Instantly share code, notes, and snippets.

@unilecs
Created December 10, 2018 06:15
Show Gist options
  • Save unilecs/8b3d2dab06b6c6dd882d88bd12c1e2c0 to your computer and use it in GitHub Desktop.
Save unilecs/8b3d2dab06b6c6dd882d88bd12c1e2c0 to your computer and use it in GitHub Desktop.
Задача: Прыгающий мяч
from math import sqrt, pi, cos, sin, atan2
# ВВОД ИСХОДНЫХ ДАННЫХ
try:
h0 = float(input('Введите высоту H0 ≥ 0 броска мяча (м): '))
if h0 < 0: raise ValueError
v0 = float(input('Введите скорость мяча V0 ≥ 0 в момент броска (м/с): '))
if v0 < 0: raise ValueError
a0 = float(input('Введите угол A0 броска мяча относительно горизонта (°): '))
t = float(input('Введите текущее время T ≥ 0 с момента броска (с): '))
if t < 0: raise ValueError
except ValueError:
print('Неверное значение!')
exit(1)
print()
# ОСНОВНЫЕ РАСЧЁТЫ
g = 9.81 # ускорение свободного падения
a0 = a0 * pi / 180 # перевод градусов в радианы
# Скорость движения мяча вправо и вверх
v0x = v0 * cos(a0)
v0y = v0 * sin(a0)
# Скорость в момент удара о землю
vf = sqrt(v0y**2 + 2*g*h0)
# Период времени между ударами мяча о землю
p = 2 * vf / g
# Время от удара о землю до того момента, когда мяч окажется
# на высоте H0, под углом A0 и будет иметь скорость V0
ts = (vf - v0y) / g
# Время, прошедшее с момента последнего удара о землю
tc = (t + ts) % p if p != 0 else 0
# Высота, на которой находится мяч в момент времени T
h = (vf - g * tc/2) * tc
# Положение мяча по горизонтали в момент времени T
x = v0x * t
# ДОПОЛНИТЕЛЬНЫЕ РАСЧЁТЫ
# Текущая скорость по вертикали и горизонтали
vy = vf - g * tc
vx = v0x
# Текущая скорость
v = sqrt(vx**2 + vy**2)
# Текущий угол
a = atan2(vy, vx)
# Максимальная высота
hmax = (vf - g * p/4) * p/2
# ВЫВОД РЕЗУЛЬТАТОВ
print(f'Смещение X по горизонтали = {x:.3f} м')
print(f'Высота мяча H = {h:.3f} м')
print(f'Скорость мяча V = {v:.3f} м/с')
print(f'Угол движения A = {a*180/pi:.3f}°')
print(f'Максимальная высота Hmax = {hmax:.3f} м')
print(f'Период времени между ударами о землю P = {p:.3f} с')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment