Рисуем снежинку Коха помощью Черепашки в Python
Чтобы нарисовать снежинку Коха, для начала надо разобраться как рисовать кривую Коха. Кивая Коха — это фрактальная кривая описанная шведским математиком Хельге фон Кохом в 1904 году. Три копии кривой Коха, образующие равносторонний треугольник и построенный остриями наружу, и образуют снежинку Коха.
Кривая Коха представляет из себя отрезок, разделенный на три равных участка, где средняя часть заменяется на равносторонний треугольник с длиной, равной 1/3 прямой. В результате получается ломаная из четырех сегментов одинаковой длины.
В нулевой итерации кривая Коха — это прямая линия.

Теперь нарисуем кривую Коха в первой итерации.
Для этого пройдем вперед на 1/3 длины нашей линии, затем повернем налево на 60° чтобы нарисовать выступ из равностороннего треугольника. Двигаемся вперед на 1/3 длины, поворачиваем направо на 120°, опять двигаемся вперед на 1/3 длины и поворачиваемся налево на 60°. Проходим еще вперед остаток 1/3 длины чтобы закончить рисовать кривую.

import turtle size = 300 turtle.forward(size / 3) turtle.left(60) turtle.forward(size / 3) turtle.right(120) turtle.forward(size / 3) turtle.left(60) turtle.forward(size / 3)
Для рисования следующих итераций напишем уже функцию, которой будем передавать два параметра — длина нашей линии и количество итераций.

Зададим условие: если n = 0, то укажем двигаться нашей Черепашке вперед на длину переданной в параметре, в противном случае будем рисовать кривую Коха по разобранному алгоритму. Но теперь заменим команды движения на рекурсивный вызов нашей функции с параметрами size / 3 и n — 1. Тем самым, параметром n мы задаем глубину рекурсии, заставляя делить каждую грань на новую кривую Коха.
import turtle
size = 300
n = 2
def koch_curve(size, n):
if n == 0:
turtle.forward(size)
else:
koch_curve(size / 3, n - 1)
turtle.left(60)
koch_curve(size / 3, n - 1)
turtle.right(120)
koch_curve(size / 3, n - 1)
turtle.left(60)
koch_curve(size / 3, n - 1)
koch_curve(size, n)
Для рисования снежинки Коха напишем отдельную функцию, которая будет рисовать равносторонний треугольник, где вместо катетов будут нарисованы кривые Коха.

Определим функцию draw_koch_snowflake в которой с помощью цикла будем рисовать равносторонний треугольник. За три итерации будем двигать черепашку вперед на длину, переданную в первом параметре и поворачивать на 60 градусов. Таким образом, Черепашка нарисует снежинку и окажется в том же месте, с которого и начинала рисовать.
import turtle
size = 300
n = 2
def koch_curve(size, n):
if n == 0:
turtle.forward(size)
else:
koch_curve(size / 3, n - 1)
turtle.left(60)
koch_curve(size / 3, n - 1)
turtle.right(120)
koch_curve(size / 3, n - 1)
turtle.left(60)
koch_curve(size / 3, n - 1)
def draw_koch_snowflake(size, n):
for i in range(3):
koch_curve(size, n)
turtle.right(120)
draw_koch_snowflake(size, n)
Посмотреть Live Demo













