Перемещение нескольких черепах в Python 3.4.3, чтобы создать «пару туси»? - PullRequest
0 голосов
/ 19 января 2019

Есть ли способ заставить multiple черепах двигаться на same time?(Или, по крайней мере, так кажется)

Я пытаюсь сделать "tusi couple" (посмотрите GIF, если вы не знаете, что это) с использованием Turtle в Python 3.4.3.Однако я не слишком уверен, как я мог заставить несколько черепах двигаться smoothly на same time.

Я уже пытался заставить своих черепах двигаться in turn и почти во всех отношениях, которые я могу придуматьЯ даже пытался объединить несколько из этих подпрограмм, но все, что я пробовал, идет на компромиссы smoothness или 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 этой подпрограммы работал, но at different angles.minimum being 3 из этих черепах.

Я довольно новичок в Python в целом, так что, если это простая проблема, которую нужно решить, пожалуйста, просто дайте мне tip относительно того, на что мне следует обратить внимание, если решение простое / понятное, тогда яне хочу, чтобы entire thing сделали для меня.

Это было определенно весело, пока я не понял, что не знаю, как сделать эту работу.

Спасибо за любую помощь.

edit: лучше всего, если вы видите этот GIF: http://intothecontinuum.tumblr.com/post/57654628209/each-of-the-white-circles-are-really-just-moving

1 Ответ

0 голосов
/ 20 января 2019

Питонская черепаха, к сожалению, не является демоном скорости, когда дело доходит до анимации. Хитрость в том, чтобы добиться какой-то скорости, - это потратить время, чтобы понять, как это работает, и попросить его сделать как можно меньше. Ниже приведена моя реализация анимированного 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)
...