是否有办法让multiple
的海龟在same time
处移动? (或者至少看起来如此)
我正在尝试使用"tusi couple"
中的Turtle制作GIF
(如果您不知道它,请查找Python 3.4.3
)。但是我不太确定如何让多只乌龟在smoothly
same time.
我已经尝试过让海龟移动in turn
,并且在我能想到的几乎所有方式中都尝试过,甚至试图合并这些子例程中的几个子例程,但是我尝试的所有内容都折衷了smoothness
或{{ 1}},否则不起作用
这是我开始与之合作的speed
:
initial code
由此您可以告诉我,我想让import turtle
def dot1():
p1, p2 = turtle.Turtle(), turtle.Turtle()
p1.goto(-300,0) #p = point
p2.goto(300,0)
c1, c2 = p1.position(), p2.position() #c = coordinate
dot = turtle.Turtle()
p1.penup()
p2.penup()
p1.shape("circle")
p2.shape("circle")
dot.shape("circle")
dot.turtlesize(3)
dot.penup()
dot.hideturtle()
dot.goto(c1)
dot.showturtle()
dot.speed(0)
dot.setheading(dot.towards(c2)) #Towards second dot
while dot.distance(c2) > 6:
if dot.distance(c1) <300:
dot.fd((dot.distance(c1)+0.1)/30)
else:
dot.fd(dot.distance(c2)/30)
dot.setheading(dot.towards(c1)) #Towards first dot
while dot.distance(c1) > 6:
if dot.distance(c1) >300:
dot.fd((dot.distance(c2)+0.1)/30)
else:
dot.fd(dot.distance(c1)/30)
dot1()
来运行此子例程。这些龟中的multiple copies
。
我一般来说对python来说还很陌生,所以如果要解决的是一个简单的问题,请给我一个at different angles
关于应该研究的内容,如果解决方案简单/易于理解,那么我不不想为我做minimum being 3
。
在我意识到如何完成这项工作之前我一无所知,这绝对是一个有趣的挑战。
感谢您的帮助。
编辑:最好的方法是看到以下GIF:http://intothecontinuum.tumblr.com/post/57654628209/each-of-the-white-circles-are-really-just-moving
答案 0 :(得分:0)
在动画方面,Python乌龟绝对不是速度恶魔。加快速度的诀窍是花一些时间了解它的工作原理,并要求它做得尽可能少。以下是我对“每个白色圆圈都确实在移动”的GIF动画图像的实现:
from math import pi, cos
from itertools import cycle
from turtle import Screen, Turtle
CIRCLES = 8
DIAMETER = 300
RADIUS = DIAMETER / 2
CURSOR_SIZE = 20
screen = Screen()
screen.tracer(False)
turtle = Turtle(visible=False)
turtle.dot(DIAMETER + CURSOR_SIZE)
turtles = []
for n in range(CIRCLES):
angle = n * pi / CIRCLES
circle = Turtle('circle')
circle.radians()
circle.color('red')
circle.penup()
circle.setheading(angle) # this stays fixed
# stash a couple of our values with the turtle
circle.angle = angle # this will change
circle.sign = 1 if cos(angle) > 0 else -1
turtles.append(circle)
circles = cycle(turtles)
while True: # really should use timer event but we're going for maximum speed!
circle = next(circles)
cosine = cos(circle.angle)
circle.forward(cosine * RADIUS - circle.sign * circle.distance(0, 0))
# update the values we stashed with the turtle
circle.sign = 1 if cosine > 0 else -1
circle.angle -= 0.1
screen.update()
screen.tracer(True)
screen.mainloop()
如果要查看圆在其上来回移动的线,则在turtles = []
行之前添加以下代码:
turtle.radians()
turtle.color('white')
for n in range(CIRCLES):
turtle.setheading(n * pi / CIRCLES)
turtle.forward(RADIUS)
turtle.backward(DIAMETER)
turtle.forward(RADIUS)