You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 05:25:15