如何在Turtle Graphics中绘制抛射运动弧线?
在Turtle Graphics中绘制抛射运动轨迹(抛物线)
你之前用的应该是Turtle的circle()方法画圆弧,这种是正圆的一部分,自然和抛射运动的抛物线轨迹不一样。抛射轨迹是二次曲线,需要通过物理公式计算每个时刻的坐标点来绘制,下面是一套轻量、易整合的代码:
import turtle import math def draw_projectile(initial_speed=20, angle=45, gravity=9.8): # 初始化画笔 pen = turtle.Turtle() pen.speed(0) # 最快绘制速度 pen.penup() # 角度转弧度 angle_rad = math.radians(angle) # 计算水平和垂直初速度分量 vx = initial_speed * math.cos(angle_rad) vy = initial_speed * math.sin(angle_rad) # 计算运动总时间(直到落地) total_time = (2 * vy) / gravity # 时间步长,越小轨迹越平滑 time_step = 0.1 current_time = 0 # 起始点设为原点 pen.goto(0, 0) pen.pendown() while current_time <= total_time: # 计算当前时刻的x、y坐标 x = vx * current_time y = vy * current_time - 0.5 * gravity * current_time ** 2 # 移动到当前点 pen.goto(x, y) current_time += time_step # 可选:隐藏画笔 pen.hideturtle() # 调用示例(可以根据需求调整参数) draw_projectile(initial_speed=30, angle=30) turtle.done()
整合说明:
- 如果你的代码已经导入了
turtle和math,直接把draw_projectile()函数复制过去就行 - 调用时可以根据需要修改初速度(
initial_speed)、发射角度(angle)、重力值(gravity) - 可以自定义画笔样式(比如颜色、粗细),只需在函数里添加
pen.color("red")或pen.pensize(2)这类语句
关键区别:
- 普通圆弧(笑脸那种):用
turtle.circle(radius, extent)绘制,是正圆的一段,曲率均匀 - 抛射轨迹:通过物理公式计算每个点的坐标,y坐标随x的变化是二次函数关系,符合真实抛射运动的轨迹
内容的提问来源于stack exchange,提问作者Polly
相关产品推荐
相关产品推荐

