Автор оригинала: Robin Andrews.
Одно из великих вещей о Python Turtle Graphics Как это дает вам мгновенную визуальную обратную связь о том, что делает программирование. Это делает его очень мощным инструментом для изучения многих тем – это компьютерная наука и программирование в целом. Эта статья об использовании графики Python Turtle, чтобы нарисовать Фрактал Узор, используя важную технику программирования под названием Рекурсия Отказ Вы можете прочитать больше о Рекурсия В общем в Этот блог пост Отказ Здесь мы будем сосредоточиться больше на том, как черепаха используется для рисования шаблона.
Вы можете увидеть программу в действии здесь:
Фрактал повторяет шаблон, который выглядит аналогично на разных уровнях увеличения.
Если вы начинаете на программировании Python, основной код для этой программы, вероятно, будет слишком продвинут, чтобы понять. Однако даже в качестве новичка вы можете получить довольно много пробега из игры со значениями этих констант:
СКОРОСТЬBg_color.Pen_color.PEN_WIDTHFractal_depth
Измени их ценности и посмотрите, на каком эффекте есть. Для цветов возможны наиболее распространенные цвета цвета – просто не забудьте поставить имя внутри "" S как «Темная орхидея» Отказ Есть полный список возможных цветов здесь Отказ
Классический пример фракталов в природе – листья папоротника – обратите внимание, как оригинальная форма повторяется при меньшем масштабе в листе.
Фрактал H-дерева с Python Turtle Graphics
H-дерево фрактал это довольно простой фрактал с легким правилом для его строительства.
H-Fractal представляет собой фрактал, построенный, начиная с линейных сегментов, соответствующих заглавной букве H, то неоднократно размещаю меньшие ч центрированные на верхней и нижней части каждого свободного вертикального сегмента.
Он может быть описан другими способами, и есть вариации точных измерений, но для того, как мы будем реализовать его, это описание является наиболее полезным.
Это лучше всего понять с картинками:
Вот уровень 0 (Python Folk нравится рассчитывать от нуля …)
Следующий уровень или Глубина Добавить H Формы на каждом из углов предыдущей версии:
… и шаблон повторяется ..
Следующий уровень:
Код Python для фрактального H-дерева с графикой черепахи
Самая важная работа, проделанная этой программой, является звонками на
Рекурсивная ничья (The, X, Y, ширина, высота, счетчик)
Аргументы для черепахи, которую мы хотим сделать наш рисунок, х, у Координаты, где будет начнет рисовать наш H и ширина/высота для H требуется на этом конкретном уровне. Обратите внимание, что как функция вызывает себя, чтобы нарисовать новые H Шпас, эти аргументы меняются!
Чтобы понять, как эта программа действительно работает, вам необходимо временно посмотреть от экрана. Получите бумагу простой бумаги или графа и карандаш, нарисуйте ось X- и Y и начните маркировку в некоторых значениях координат. Вы можете проверить вашу работу, не сопротивляясь Печать Заявление внутри draw_line () Чтобы прочитать то, что происходит внутри программы. Например:
Recursive_Draw первоначально называется Recursive_Draw (Artist, - Drawing_width/2, - Drawing_Height/2, Drawing_width, Drawing_Height, fractal_depth)
Этот первоначальный звонок для draw_line () , который называется из Recursive_Draw () будет использовать эти координаты:
Две очень важные вещи, чтобы заметить, без которого Рекурсия не может работать:
- Базовый случай
- Рекурсивный шаг
Они помечены комментариями в коде. Все рекурсивные алгоритмы должны приближаться к базовому случаю, или они никогда не прекращают выполнять, пока не закончится доступная память.
Листинг кода Python для фрактала H-дерева
Вот полный список для Python Thurtle Graphics H-деревьев Fractal:
"""
H-Tree Fractal using recursion and Turtle Graphics.
Robin Andrews - https://compucademy.net/
"""
import turtle
SPEED = 5
BG_COLOR = "blue"
PEN_COLOR = "lightgreen"
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 800
DRAWING_WIDTH = 700
DRAWING_HEIGHT = 700
PEN_WIDTH = 5
TITLE = "H-Tree Fractal with Python Turtle Graphics"
FRACTAL_DEPTH = 3
def draw_line(tur, pos1, pos2):
# print("Drawing from", pos1, "to", pos2) # Uncomment for tracing the algorithm.
tur.penup()
tur.goto(pos1[0], pos1[1])
tur.pendown()
tur.goto(pos2[0], pos2[1])
def recursive_draw(tur, x, y, width, height, count):
draw_line(
tur,
[x + width * 0.25, height // 2 + y],
[x + width * 0.75, height // 2 + y],
)
draw_line(
tur,
[x + width * 0.25, (height * 0.5) // 2 + y],
[x + width * 0.25, (height * 1.5) // 2 + y],
)
draw_line(
tur,
[x + width * 0.75, (height * 0.5) // 2 + y],
[x + width * 0.75, (height * 1.5) // 2 + y],
)
if count <= 0: # The base case
return
else: # The recursive step
count -= 1
# Top left
recursive_draw(tur, x, y, width // 2, height // 2, count)
# Top right
recursive_draw(tur, x + width // 2, y, width // 2, height // 2, count)
# Bottom left
recursive_draw(tur, x, y + width // 2, width // 2, height // 2, count)
# Bottom right
recursive_draw(tur, x + width // 2, y + width // 2, width // 2, height // 2, count)
if __name__ == "__main__":
# Screen setup
screen = turtle.Screen()
screen.setup(SCREEN_WIDTH, SCREEN_HEIGHT)
screen.title(TITLE)
screen.bgcolor(BG_COLOR)
# Turtle artist (pen) setup
artist = turtle.Turtle()
artist.hideturtle()
artist.pensize(PEN_WIDTH)
artist.color(PEN_COLOR)
artist.speed(SPEED)
# Initial call to recursive draw function
recursive_draw(artist, - DRAWING_WIDTH / 2, - DRAWING_HEIGHT / 2, DRAWING_WIDTH, DRAWING_HEIGHT, FRACTAL_DEPTH)
# Every Python Turtle program needs this (or an equivalent) to work correctly.
turtle.done()
Счастливые вычисления!