我需要帮助编写应该显示一个或两个图表的代码。在情况 1 中,应该有一个动态图,其中,在轨迹本身的动画之后,有一个暂停,在此期间您可以看到下图所示的值。在第二种情况下,当有 2 个图表时,您可以通过显示仅包含其轨迹的动态图表和显示所有最终数据的静态图表来进行响应,如图所示。你只能使用matplotlib和numpy,我尝试自己做(下面的代码),但它不能在我的Mac上运行,它说matplotlib文件中的某个地方有错误,我不知道该怎么办,该代码似乎在另一台装有 Windows 的 PC 上运行。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
# Начальные параметры для первого графика
v0_1 = 10.0 # м/с
alpha_1 = 50.0 * np.pi / 180.0 # радианы
g = 9.81 # м/с^2
# Время полёта (можно вычислить, но здесь дано)
t_flight_1 = 2.016
# Создание массива времени для первого графика
t_1 = np.linspace(0, t_flight_1, 100)
# Вычисление координат x и y для первого графика
x_1 = v0_1 * np.cos(alpha_1) * t_1
y_1 = v0_1 * np.sin(alpha_1) * t_1 - 0.5 * g * t_1**2
# Начальные параметры для второго графика
v0_2 = 10.0
alpha_2 = 80.0
alpha_rad_2 = np.radians(alpha_2)
t_flight_2 = 2 * v0_2 * np.sin(alpha_rad_2) / g
t_2 = np.linspace(0, t_flight_2, 100)
x_2 = v0_2 * np.cos(alpha_rad_2) * t_2
y_2 = v0_2 * np.sin(alpha_rad_2) * t_2 - 0.5 * g * t_2**2
# Построение графика с помощью subplot
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5)) # 1 строка, 2 столбца
# График 1: Статический график
ax1.plot(x_1, y_1)
ax1.set_xlabel("Расстояние, м")
ax1.set_ylabel("Высота, м")
ax1.set_title("Траектория тела, брошенного под углом к горизонту")
# Вычисляем максимальную высоту и дальность полета для первого графика
ymax_1 = max(y_1)
xmax_1 = max(x_1)
# Добавление информации о параметрах на график (опционально)
ax1.text(0.1, 4, f"v0 = {v0_1:.1f} м/с")
ax1.text(0.1, 3.5, f"α = {50.0:.1f}°")
ax1.text(xmax_1 * 0.7, ymax_1 * 0.8, f"h_max ≈ {ymax_1:.2f} м")
ax1.text(xmax_1 * 0.7, ymax_1 * 0.6, f"L ≈ {xmax_1:.2f} м")
ax1.grid(True)
# График 2: Анимированный график
line, = ax2.plot([], [], lw=2)
point, = ax2.plot([], [], 'go')
text = ax2.text(0, 1, '')
def init2():
ax2.set_xlim(0, np.max(x_2))
ax2.set_ylim(0, np.max(y_2))
ax2.set_xlabel('Distance (m)')
ax2.set_ylabel('Height (m)')
ax2.set_title('Projectile Motion')
return line, point, text
def animate2(i):
line.set_data(x_2[:i], y_2[:i])
point.set_data(x_2[i], y_2[i])
text.set_text(f't={t_2[i]:.2f} s')
return line, point, text
ani = animation.FuncAnimation(fig, animate2, frames=len(t_2), init_func=init2, interval=50, blit=True)
plt.tight_layout() # Отрегулировать разметку для лучшего отображения
plt.show()
