代码解释:
-
Slingshot
类:angle
: 发射角度(度)。speed
: 发射速度(米/秒)。gravity
: 重力加速度(米/秒²)。
-
launch
方法:- 将发射角度转换为弧度,计算速度的水平(
vx
)和垂直分量(vy
)。
- 将发射角度转换为弧度,计算速度的水平(
-
simulate_trajectory
函数:- 使用基本的物理公式模拟弹弓发射物体的飞行轨迹。
- 计算物体的 x 和 y 位置,并保存到列表中。
-
plot_trajectory
函数:- 使用 Matplotlib 绘制飞行轨迹图。
-
main
函数:- 接受用户输入的发射角度和速度,创建
Slingshot
对象。 - 模拟轨迹并绘制图形。
- 接受用户输入的发射角度和速度,创建
import math
import time
import matplotlib.pyplot as plt
class Slingshot:
def __init__(self, angle, speed):
self.angle = angle # 发射角度(度)
self.speed = speed # 发射速度(米/秒)
self.gravity = 9.81 # 重力加速度(米/秒^2)
def launch(self):
# 将角度转换为弧度
angle_rad = math.radians(self.angle)
# 计算初速度的水平和垂直分量
vx = self.speed * math.cos(angle_rad)
vy = self.speed * math.sin(angle_rad)
return vx, vy
def simulate_trajectory(slingshot):
vx, vy = slingshot.launch()
time_interval = 0.1 # 时间间隔(秒)
total_time = 2 * vy / slingshot.gravity # 总飞行时间
num_steps = int(total_time / time_interval) + 1
x_positions = []
y_positions = []
time_points = []
for step in range(num_steps):
t = step * time_interval
x = vx * t
y = vy * t - 0.5 * slingshot.gravity * t**2
if y < 0:
break # 物体落地时停止计算
x_positions.append(x)
y_positions.append(y)
time_points.append(t)
return x_positions, y_positions, time_points
def plot_trajectory(x_positions, y_positions):
plt.figure(figsize=(10, 5))
plt.plot(x_positions, y_positions, label="Trajectory")
plt.xlabel("Distance (m)")
plt.ylabel("Height (m)")
plt.title("Slingshot Trajectory")
plt.legend()
plt.grid(True)
plt.show()
def main():
angle = float(input("Enter the launch angle (degrees): "))
speed = float(input("Enter the launch speed (m/s): "))
slingshot = Slingshot(angle, speed)
x_positions, y_positions, time_points = simulate_trajectory(slingshot)
plot_trajectory(x_positions, y_positions)
if __name__ == "__main__":
main()