展示弹丸(乌龟)如何随时间移动

时间:2016-09-20 03:41:56

标签: python turtle-graphics

我是Python的新手,目前在使用乌龟图片时遇到了困难。这就是我想要解决的问题

  

在Turtellini(Python龟居住的星球)上   运输系统用巨大的弹弓推动海龟。一个   特定乌龟的原始位置(x0,y0)是(-180,-100)。他是   然后以每单位88个单位的初始垂直速度(vy)向上射击   第二个和水平速度(vx)为每秒20个单位   对。他旅行了16秒。重力加速度(g)   是每秒11个单位的平方。龟的位置在   给定的第二(t)计算如下:x = x0 + vx * t和y = y0   + vy * t - g / 2 * t2。这个节目是为了展示乌龟在这段时间里的旅行方式。

输出应该是这样的:

Output Image

这是我应该做的;

  • 设置常数(垂直速度,水平速度, 重力)和变量(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()

我知道我做得不好;但有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分: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()

与黄金标准图像不同,我认为乌龟像子弹一样是空气动力学的,并且首先穿过飞行头。我不知道,也无法快速找到射弹飞行角度的公式,所以我从现有的公式中猜到了:

enter image description here