Рисуем снежинку Коха помощью Черепашки в 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