如何使用Python turtle库实现台球母球按指定朝向正确移动
错误原因与修正方案
核心错误点
- 三角函数单位不匹配:
math.cos()、math.sin()接收的输入是弧度值,你直接传入用户输入的角度值,计算出的位移分量完全不符合预期朝向,这是方向错误的核心原因。 - 初始坐标错位:存储球实时位置的
x、y变量初始值被设为了边界值,没有对齐母球初始的(90,-80)坐标,首次位移就会跳转到错误位置。 - 变量重名冲突:循环计数变量和坐标变量都用了
x,每次循环开始时坐标值都会被强制覆盖为0-49的循环计数,位移逻辑完全失效。
修正后代码
import turtle from math import * t = turtle.Turtle() width=200 # 固定母球标识 ball=turtle.Turtle() ball.speed(0) ball.penup() ball.goto(90,-80) ball.color("black") ball.shape("circle") # 运动母球初始化 t.color("yellow") t.shape("circle") t.penup() t.goto(90,-80) t.pendown() angleString="Enter the hit force's angle (0-360) in degrees: " angle=int(input(angleString)) # 运动参数配置 step=20 LIMIT_X=width-8 LIMIT_Y=(width/2)-8 t.setheading(angle) # 角度转弧度后再计算位移分量 t.dx=step*cos(radians(angle)) t.dy=step*sin(radians(angle)) # 初始坐标对齐母球初始位置 x, y = t.pos() # 循环变量改用i避免重名 for i in range(50): t.speed(1) print(i, t.pos(), t.heading()) x += t.dx y += t.dy t.goto(x,y) # 边界碰撞反弹 if abs(x)>LIMIT_X: t.dx = -t.dx if abs(y)>LIMIT_Y: t.dy = -t.dy turtle.done()
内容的提问来源于stack exchange,提问作者LuckyRaven10
相关产品推荐
相关产品推荐

