upd
This commit is contained in:
122
physics/homework/graphs/2.py
Normal file
122
physics/homework/graphs/2.py
Normal file
@@ -0,0 +1,122 @@
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
# Параметры задачи
|
||||
S = 40 # общее расстояние (км) для наглядности
|
||||
v_walk = 4 # скорость пешехода (км/ч)
|
||||
v_bike = 20 # скорость велосипедиста (км/ч)
|
||||
|
||||
# Оптимальное решение: x = S/2
|
||||
x = S / 2 # расстояние, которое первый турист едет на велосипеде
|
||||
|
||||
# Времена для каждого этапа
|
||||
t1_bike = x / v_bike # время первого туриста на велосипеде
|
||||
t1_walk = (S - x) / v_walk # время первого туриста пешком
|
||||
t_total = t1_bike + t1_walk # общее время
|
||||
|
||||
t2_walk = x / v_walk # время второго туриста пешком
|
||||
t2_bike = (S - x) / v_bike # время второго туриста на велосипеде
|
||||
|
||||
print(f"Общее расстояние: {S} км")
|
||||
print(f"Расстояние на велосипеде для каждого: {x} км")
|
||||
print(f"Общее время: {t_total:.2f} ч")
|
||||
print(f"Средняя скорость: {S/t_total:.2f} км/ч")
|
||||
|
||||
# Построение графика
|
||||
fig, ax = plt.subplots(figsize=(12, 8))
|
||||
|
||||
# Турист A (красная линия)
|
||||
# Этап 1: на велосипеде от 0 до x
|
||||
time_A1 = np.linspace(0, t1_bike, 100)
|
||||
pos_A1 = v_bike * time_A1
|
||||
|
||||
# Этап 2: пешком от x до S
|
||||
time_A2 = np.linspace(t1_bike, t_total, 100)
|
||||
pos_A2 = x + v_walk * (time_A2 - t1_bike)
|
||||
|
||||
# Турист B (синяя линия)
|
||||
# Этап 1: пешком от 0 до x
|
||||
time_B1 = np.linspace(0, t2_walk, 100)
|
||||
pos_B1 = v_walk * time_B1
|
||||
|
||||
# Этап 2: на велосипеде от x до S
|
||||
time_B2 = np.linspace(t2_walk, t_total, 100)
|
||||
pos_B2 = x + v_bike * (time_B2 - t2_walk)
|
||||
|
||||
# Построение графиков
|
||||
ax.plot(time_A1, pos_A1, "r-", linewidth=3, label="Турист A (велосипед)")
|
||||
ax.plot(time_A2, pos_A2, "r--", linewidth=3, label="Турист A (пешком)")
|
||||
ax.plot(time_B1, pos_B1, "b--", linewidth=3, label="Турист B (пешком)")
|
||||
ax.plot(time_B2, pos_B2, "b-", linewidth=3, label="Турист B (велосипед)")
|
||||
|
||||
# Отметки важных точек
|
||||
ax.plot(t1_bike, x, "ro", markersize=8, label="A оставляет велосипед")
|
||||
ax.plot(t2_walk, x, "bo", markersize=8, label="B берет велосипед")
|
||||
ax.plot(t_total, S, "go", markersize=10, label="Финиш (одновременно)")
|
||||
|
||||
# Вертикальная линия в точке передачи велосипеда
|
||||
ax.axvline(
|
||||
x=t2_walk,
|
||||
color="gray",
|
||||
linestyle=":",
|
||||
alpha=0.7,
|
||||
label=f"Передача велосипеда (t={t2_walk:.2f}ч)",
|
||||
)
|
||||
ax.axhline(
|
||||
y=x, color="gray", linestyle=":", alpha=0.7, label=f"Точка передачи (x={x}км)"
|
||||
)
|
||||
|
||||
# Настройка графика
|
||||
ax.set_xlabel("Время (часы)", fontsize=12)
|
||||
ax.set_ylabel("Расстояние (км)", fontsize=12)
|
||||
ax.set_title(
|
||||
"График движения двух туристов с одним велосипедом\n"
|
||||
+ f"Средняя скорость: {S/t_total:.2f} км/ч",
|
||||
fontsize=14,
|
||||
fontweight="bold",
|
||||
)
|
||||
ax.grid(True, alpha=0.3)
|
||||
ax.legend(fontsize=10, loc="center right")
|
||||
|
||||
# Добавление аннотаций
|
||||
ax.annotate(
|
||||
f"Скорость: {v_bike} км/ч",
|
||||
xy=(t1_bike / 2, x / 2),
|
||||
xytext=(0.5, 10),
|
||||
arrowprops=dict(arrowstyle="->", color="red", alpha=0.7),
|
||||
fontsize=10,
|
||||
color="red",
|
||||
)
|
||||
ax.annotate(
|
||||
f"Скорость: {v_walk} км/ч",
|
||||
xy=(t1_bike + (t_total - t1_bike) / 2, x + (S - x) / 2),
|
||||
xytext=(4, 35),
|
||||
arrowprops=dict(arrowstyle="->", color="red", alpha=0.7),
|
||||
fontsize=10,
|
||||
color="red",
|
||||
)
|
||||
ax.annotate(
|
||||
f"Скорость: {v_walk} км/ч",
|
||||
xy=(t2_walk / 2, x / 2),
|
||||
xytext=(1.5, 5),
|
||||
arrowprops=dict(arrowstyle="->", color="blue", alpha=0.7),
|
||||
fontsize=10,
|
||||
color="blue",
|
||||
)
|
||||
ax.annotate(
|
||||
f"Скорость: {v_bike} км/ч",
|
||||
xy=(t2_walk + (t_total - t2_walk) / 2, x + (S - x) / 2),
|
||||
xytext=(3.5, 25),
|
||||
arrowprops=dict(arrowstyle="->", color="blue", alpha=0.7),
|
||||
fontsize=10,
|
||||
color="blue",
|
||||
)
|
||||
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
|
||||
# Проверка правильности решения
|
||||
print(f"\nПроверка:")
|
||||
print(f"Время туриста A: {t1_bike:.2f} + {t1_walk:.2f} = {t_total:.2f} ч")
|
||||
print(f"Время туриста B: {t2_walk:.2f} + {t2_bike:.2f} = {t2_walk + t2_bike:.2f} ч")
|
||||
print(f"Разность времен: {abs(t_total - (t2_walk + t2_bike)):.6f} ч (должно быть ~0)")
|
||||
Reference in New Issue
Block a user