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

Веселье с фракталами – Python Turtle Graphics

Нарисуйте удивительные фрактальные узоры с графикой Python Turtle. Эта статья учит вас, как использовать Python, чтобы создать фрактал H-дерева с помощью Python.

Автор оригинала: Robin Andrews.

Одно из великих вещей о Python Turtle Graphics Как это дает вам мгновенную визуальную обратную связь о том, что делает программирование. Это делает его очень мощным инструментом для изучения многих тем – это компьютерная наука и программирование в целом. Эта статья об использовании графики Python Turtle, чтобы нарисовать Фрактал Узор, используя важную технику программирования под названием Рекурсия Отказ Вы можете прочитать больше о Рекурсия В общем в Этот блог пост Отказ Здесь мы будем сосредоточиться больше на том, как черепаха используется для рисования шаблона.

Вы можете увидеть программу в действии здесь:

Фрактал повторяет шаблон, который выглядит аналогично на разных уровнях увеличения.

Если вы начинаете на программировании Python, основной код для этой программы, вероятно, будет слишком продвинут, чтобы понять. Однако даже в качестве новичка вы можете получить довольно много пробега из игры со значениями этих констант:

  • СКОРОСТЬ
  • Bg_color.
  • Pen_color.
  • PEN_WIDTH
  • Fractal_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()

Счастливые вычисления!