-
-
Save unilecs/8b3d2dab06b6c6dd882d88bd12c1e2c0 to your computer and use it in GitHub Desktop.
Задача: Прыгающий мяч
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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