我正在尝试使乌龟的形状遵循直线的方向。
我有一个简单的抛物线,我希望乌龟的形状遵循直线的方向-当图形上升时,乌龟朝上,而图形下降时,乌龟朝下。
我将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()
答案 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()