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)")