使Python乌龟面对被绘制线的方向

时间:2019-03-04 01:32:14

标签: python graphics turtle-graphics

我正在尝试使乌龟的形状遵循直线的方向。

我有一个简单的抛物线,我希望乌龟的形状遵循直线的方向-当图形上升时,乌龟朝上,而图形下降时,乌龟朝下。
我将goto()用于乌龟的位置,并将x=x+1用于图形的x位置:

t.goto(x,y)
t.right(??) - this?
t.left(??) - this?
t.setheading(??) or this?

实现此目标的最佳方法是什么?当我尝试在t.right()循环中使用while时(我一直循环直到x完成),乌龟在移动时继续旋转一圈,这不是我想要的。


仍然没有得到这个。我添加了建议的额外代码-这是我想要达到的目的的EDIT和完整代码...

我正在使用物理公式计算轨迹(我使用了这个公式,所以我知道输出的值是正确的)。 http://www.softschools.com/formulas/physics/trajectory_formula/162/

import math
import turtle
import time
w=turtle.Turtle()


i=0
angle=66.4
velocity=45.0
g=9.8

t=math.tan(math.radians(angle))
c=math.cos(math.radians(angle))

turtle.delay(9)

w.shape("turtle")
w.setheading(90)

while i < 150:
    start = i * t
    middle = g*(i**2)
    bottom =(2*(velocity**2)*c**2)
    total = start-middle/bottom
    print(total)

    w.setheading(turtle.towards(i,total))
    w.goto(i,total)

    i=i+1

turtle.exitonclick()

2 个答案:

答案 0 :(得分:1)

乌龟的方向可以根据您在当前位置的函数导数来确定。

如果具有作为sympy函数的函数,则可以要求Python进行区分。或者,您也可以自己做。如果您的功能是

y = x^2

,则导数为

dy = 2 * x

在当前位置给出该导数,其圆弧切线为您提供乌龟的航向:

t.setheading(math.atan(dy))

确保将乌龟的角度模式设置为弧度或将其转换为度数

t.setheading(math.degrees(math.atan(dy)))

答案 1 :(得分:1)

我同意@NicoSchertler的观点,即导数的反正切是数学计算的方法。但是,如果只是为了获得良好的视觉效果,则有一种更简单的方法。我们可以结合使用乌龟的setheading()towards()方法,不断地将乌龟的航向设定到下一个位置:

from turtle import Screen, Turtle

turtle = Turtle(shape='turtle', visible=False)
turtle.penup()
turtle.goto(-20, -400)
turtle.pendown()
turtle.setheading(90)
turtle.showturtle()

for x in range(-20, 20):

    y = -x ** 2

    turtle.setheading(turtle.towards(x, y))
    turtle.goto(x, y)

screen = Screen()
screen.exitonclick()

enter image description here