В предыдущем посте мы узнали, как нарисовать заполненную звезду, используя Python Turtle. В этой статье давайте сделаем спираль, потому что почему нет.
Мы можем легко нарисовать круг, используя Turtle.Circle но мы собираемся нарисовать его по-другому
import turtle as t t.tracer(10,1) for i in range(360): t.forward(1) t.right(1) t.update()
В коде выше, Tracer и Обновление Команды используются для увеличения скорости рисования. Мы можем удалить их, если хотим.
Черепаха поднимает шаг вперед, затем поворачивается прямо на 1 градус. К тому времени, когда петлю завершает черепаху, повернул на 360 градусов, поэтому завершил полное вращение, и мы получим круг
Вместо того, чтобы двигаться на постоянном расстоянии, что произойдет, если черепаха двигается больше на каждой итерации
for i in range(360): t.forward(i) t.right(1)
Я
заменяет 1
как параметр на вперед
Мы получим то, что быстро движется мимо экрана. Давайте посмотрим, сможем ли мы сделать это быстрее
for i in range(360): t.forward(i) t.right(20)
20
заменяет 1
как параметр на правильно
Вот наша спираль. Но обратите внимание, что кривая не гладкая
Давайте посмотрим, как мы можем сделать спиральную кривую более гладкой. Но сначала попробуйте следующий код
# Quadrant 1 t1 = t.Turtle() t1.penup() t1.goto(125, 125) t1.pendown() t1.circle(100) # Quadrant 2 t2 = t.Turtle() t2.penup() t2.goto(-125, 125) t2.pendown() t2.circle(100, 270) # Quadrant 3 t2 = t.Turtle() t2.penup() t2.goto(-125, -125) t2.pendown() t2.circle(100, 180) # Quadrant 4 t3 = t.Turtle() t3.penup() t3.goto(125, -125) t3.pendown() t3.circle(100, 90)
Код печатает 4 круг разделов в 4 квадрантах
Мы можем использовать черепаху Круг
функция, чтобы нарисовать часть круга. Мы можем использовать эту функцию, чтобы наша черепаха двигаться более плавным способом по спирали
import turtle as t t.tracer(10,1) for i in range(360): t.circle(i,20) t.update()
вперед
и правильно
Функциональные звонки заменены на круг
Круг
Функция выше перемещает черепаху вперед, но и поворачивается на определенный угол. Вот что мы получаем
Теперь у нас есть гладкая спираль!
Но что, если мы хотели что-то, что выглядит немного разным – как спиральная галактика или Млечный путь? Нам сначала нужно добавить больше оружия.
Для этого мы собираемся создать несколько черепах
import turtle as t t.tracer(10,1) t1=t.Turtle() t2=t.Turtle() t1.setheading(0) # Looks to the right t2.setheading(180) # Looks to the right for x in range(360): radius = x angle = 1 t1.circle(radius,angle) t2.circle(radius,angle) t.update()
В коде выше, T1
и T2
два черепаха, которые были первоначально установлены, чтобы посмотреть вправо и влево, соответственно, используя Утомление команда
Обе черепахи теперь начали свою собственную спираль в своем собственном направлении. Теперь давайте посмотрим, как сделать это более настраиваемым
import turtle as t t.tracer(10,1) N = 10 angle = 1 turtles = [] for position in range(N): look_at = 360/N*position new = t.Turtle() new.setheading(look_at) turtles.append(new) for radius in range(360): for my in turtles: my.circle(radius, angle) t.update()
Мы просто изменили код такого, что любое количество черепах может быть создано путем изменения N
и все они смотрят в сторону разных направлений симметричной образом
Интересно, что спиральные руки, кажется, пересекаются. Мы можем предотвратить это, что сделало несколько корректировок
import turtle as t t.tracer(10,1) N = 10 angle = 30 turtles = [] for position in range(N): look_at = 360/N*position new = t.Turtle() new.setheading(look_at) turtles.append(new) for radius in range(360): for my in turtles: my.circle(radius*radius, angle) t.update()
Мы устанавливаем Угол
к 30
и мы в квадрате радиус
Угол наклон поворота на каждой итерации больше и увеличивая скорость, при которой спираль увеличивается (путем квадратации радиуса – радиус * Радиус
) Мы можем предотвратить пересечение спиралей. (Обратите внимание, что я обнаружил это случайно)
Йи!
Оригинал: “https://dev.to/taarimalta/how-to-draw-a-spiral-with-python-turtle-2n5c”