Блог учителя Информатики

Рисуем новогодние снежинки Черепашкой

Сегодня мы нарисуем с использованием Черепашки новогодние снежинки.

Для начала попробуем нарисовать один из лучей нашей будущей снежинки. Зададим с помощью переменной line длину луча. Изменим также командой pensize() толщину и color() цвет линии на синий крайола (#1F75FE).

Продвинем Черепашку на длину нашей линии, затем вернем ее назад на треть этой длины. Повернем налево на 45 градусов, чтобы нарисовать узор на конце нашего луча. И продвинемся вперед на треть длины луча. Вернемся назад и повернем теперь направо уже на 90 градусов, чтобы нарисовать вторую часть нашего узора. Повторим команды которые мы делали для рисования левой части. После этого повернем налево на 45 градусов, чтобы Черепашка смотрела в ту же сторону, в какую мы рисовали наш луч. Вернемся в самое начало, откуда мы начали движение, проделав оставшиеся 2/3 пути.

line = 120
turtle.pensize(7)
turtle.color('#1F75FE')
turtle.forward(line)
turtle.backward(line / 3)
turtle.left(45)
turtle.forward(line / 3)
turtle.backward(line / 3)
turtle.right(90)
turtle.forward(line / 3)
turtle.backward(line / 3)
turtle.left(45)
turtle.backward(2 * line / 3)

Но у снежинке таких лучиков может быть пять, шесть или больше. Чтобы не повторять эти команды много раз, мы вложим их в цикл со счетчиком for. Количество итераций цикла будет совпадать с количеством лучей у нашей снежинки.

Добавим переменную n отвечающую за количество лучей. Так же в конце цикла добавим поворот Черепашки налево на 360/n, чтобы развернуть Черепашку и нарисовать другие лучи снежинки.
Так как нам не нужна сама переменная со счетчиком, то мы ее можем заменить на _ в заголовке цикла.

line = 120
n = 6
turtle.pensize(7)
turtle.color('#1F75FE')
for _ in range(n):
    turtle.forward(line)
    turtle.backward(line / 3)
    turtle.left(45)
    turtle.forward(line / 3)
    turtle.backward(line / 3)
    turtle.right(90)
    turtle.forward(line / 3)
    turtle.backward(line / 3)
    turtle.left(45)
    turtle.backward(2 * line / 3)
    turtle.left(360 / n)

Теперь, когда мы умеем рисовать снежинку, напишем функцию, которая будет это делать. В качестве обязательных параметров она будет принимать координаты точки x и y центра снежинки. Из необязательных: длину луча снежинки line, толщину линии size и цвет color.

import turtle


def draw_snowflake(x, y, line=120, n=6, size=5, color='#1F75FE'):
    """
    This function draws an snowflake.
    """
    turtle.penup()
    turtle.goto(x, y)
    turtle.pendown()
    turtle.color(color)
    turtle.pensize(size)
    for _ in range(n):
        turtle.forward(line)
        turtle.backward(line / 3)
        turtle.left(45)
        turtle.forward(line / 3)
        turtle.backward(line / 3)
        turtle.right(90)
        turtle.forward(line / 3)
        turtle.backward(line / 3)
        turtle.left(45)
        turtle.backward(2 * line / 3)
        turtle.left(360 / n)


draw_snowflake(120, 100)
draw_snowflake(-120, 100, 110, size=15)
draw_snowflake(-100, -100, 90, 8)
Посмотреть Demo со снежинками
Поделиться:
Вам также может понравится
Решение олимпиадных задач по информатике: Наименьший остаток
Решение олимпиадных задач по информатике: Последовательность
Решение олимпиадных задач по информатике: От перестановки чисел что-то меняется
Делаем Черепашку в виде снежинки