python代码实现弹弓游戏

代码解释:

  1. Slingshot

    • angle: 发射角度(度)。
    • speed: 发射速度(米/秒)。
    • gravity: 重力加速度(米/秒²)。
  2. launch 方法

    • 将发射角度转换为弧度,计算速度的水平(vx)和垂直分量(vy)。
  3. simulate_trajectory 函数

    • 使用基本的物理公式模拟弹弓发射物体的飞行轨迹。
    • 计算物体的 x 和 y 位置,并保存到列表中。
  4. plot_trajectory 函数

    • 使用 Matplotlib 绘制飞行轨迹图。
  5. 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()
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值