在Python 3.4.3中移动多个Turtle来组成“ Tusi Couple”?

时间:2019-01-19 19:58:08

标签: python turtle-graphics

是否有办法让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

1 个答案:

答案 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()

enter image description here

如果要查看圆在其上来回移动的线,则在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)