【问题标题】:Show how a projectile (turtle) travels over time展示弹丸(乌龟)如何随时间移动
【发布时间】:2016-09-20 03:41:55
【问题描述】:

我是 Python 新手,目前在海龟图形方面遇到了困难。这就是我要解决的问题

在 Turtellini(蟒蛇生活的星球)上 运输系统用巨大的弹弓推动海龟。一个 特定海龟的原始位置 (x0, y0) 是 (-180, -100)。他是 然后以 88 个单位/单位的初始垂直速度 (vy) 向上发射 秒和每秒 20 个单位的水平速度 (vx) 到 正确的。他旅行了16秒。重力加速度 (g) 是每秒 11 个单位。海龟的位置在 给定秒 (t) 计算如下: x = x0 + vx * t 和 y = y0 + vy * t - g/2 * t2 。这个程序是为了展示一只乌龟在这段时间内是如何旅行的。

输出应该是这样的:

这是我应该做的;

  • 设置常数(垂直速度、水平速度、 重力)和变量(x 和 y 坐标)通过以下方式设置海龟 给他一个适当的形状,把他的尾巴竖起来,把他移到 初始位置,把他的尾巴放下做一个循环,重复 1 到 16 秒(含)。在循环显示的每次迭代中 x 和 y 变量的值(在 shell 窗口中),移动 乌龟到那些坐标,让乌龟印上他的形状, 计算循环后 x 和 y 变量的新值 终止,将海龟移动到最后计算的坐标, 更改他的颜色,并标记他的形状,然后等待鼠标点击

到目前为止我的代码:

import turtle

def main():
    wn = turtle.Screen()
    turtellini = turtle.Turtle()
    t = int(input("Blab blab blab: "))
    x0 = -180
    y0 = -100
    vx = 20
    vy = 88
    g = 11
    x = (float(x0 + vx * t))
    y = (float(y0 + vy * t - g / 2 * t**2))
    turtellini.color("black")
    turtellini.shape("turtle")
    turtellini.up()
    turtellini.goto(-180,-100)
    turtellini.down()
    for i in range(1,16,1):
        turtellini.stamp()
        turtellini.forward(i)
        turtellini.right(i)
    print(x)
    print(y)
if __name__ == "__main__":
    main()

我知道我做的不好;但是谁能帮我解决这个问题?

【问题讨论】:

    标签: python turtle-graphics


    【解决方案1】:

    您似乎拥有大部分零件。我看到的最大问题是您没有将 x,y 计算放入循环中。在您的运动方程中,循环迭代变量i 实际上是t。每次计算新的 x,y 时,只需将海龟移动到该位置即可:

    import turtle
    from math import pi, atan
    
    x0, y0 = -180, -100  # initial location
    
    vx, vy = 20.0, 88.0  # initial velocity in units per second
    
    travel_time = 16  # seconds
    
    g = 11.0  # acceleration due to gravity in units per second squared
    
    turtellini = turtle.Turtle(shape='turtle', visible=False)
    
    turtellini.penup()
    turtellini.radians()  # to make turtle compatible with math.atan()
    turtellini.setheading(pi / 2)  # straight up
    turtellini.goto(x0, y0)
    turtellini.pendown()
    turtellini.showturtle()
    turtellini.stamp()
    
    for t in range(1, travel_time + 1):
    
        x = x0 + vx * t
        y = y0 + vy * t - g / 2 * t**2
    
        turtellini.goto(x, y)
    
        print(x, y)
    
        angle = atan((vy * t - g * t**2) / (vx * t))  # a guess!
        turtellini.setheading(angle)
    
        turtellini.stamp()
    
    turtle.exitonclick()
    

    与黄金标准图像不同,我假设乌龟像子弹一样具有空气动力学特性,并且在飞行过程中头部先行。我不知道,也无法很快找到弹丸飞行角度的公式,所以我从现有的公式中猜测:

    【讨论】:

      猜你喜欢
      • 2022-10-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      • 1970-01-01
      • 2016-09-28
      • 2010-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多