Рубрики
Без рубрики

Как нарисовать спираль с черепахой Python

В предыдущем посте мы узнали, как нарисовать заполненную звезду, используя Python Turtle. В этой статье давайте … Теги с Python, черепахи, графикой, учебником.

В предыдущем посте мы узнали, как нарисовать заполненную звезду, используя 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”