Сообщество Engee

Треугольник Серпинского

Автор
avatar-maximsidorovmaximsidorov
Notebook

Треугольник Серпинского (Chaos Game)

В этом примере рассматривается реализация алгоритма для построения треугольника Серпинского на языке Julia с использованием графической библиотеки Luxor для визуализации.

Введение

Алгоритм треугольника Серпинского — это простой итеративный процесс, который используется для генерации фракталов. Несмотря на кажущуюся простоту, этот метод позволяет создавать сложные и красивые геометрические структуры. В основе алгоритма лежит случайный выбор одной из заранее определённых точек (вершин) и последующее построение новой точки на определённом расстоянии от текущей позиции. Повторяя этот процесс много раз, мы получаем визуализацию фрактального множества.

Основная часть

Установка внешнего пакета Luxor, если он ещё не установлен

import Pkg; Pkg.add("Luxor")

Подключение библиотеки Luxor для работы с графикой

using Luxor

Определение функции, реализующей алгоритм игры Хаоса

function chaos()
    # Задаем размер изображения (ширина и высота в пикселях)
    width  = 1000
    height = 1000

    # Создаем новый чертеж с заданными размерами и именем файла
    Drawing(width, height, "./chaos.png")

    # Создаем "черепашку" (объект Turtle), которая будет рисовать точки
    # Параметры: начальные координаты (0, 0), видимость (true), направление (0 градусов), цвет (черный)
    t = Turtle(0, 0, true, 0, (0., 0., 0.))

    # Случайным образом задаем начальные координаты точки
    x = rand(1:width)
    y = rand(1:height)

    # Цикл итераций: чем больше, тем точнее формируется фрактал
    for l in 1:30_000
        # Случайный выбор одной из трех возможных вершин (1, 2 или 3)
        v = rand(1:3)

        # В зависимости от выбранной вершины, пересчитываем координаты точки
        if v == 1
            # Первая вершина находится в начале координат (0,0) — точка "стягивается" к началу координат
            x /= 2
            y /= 2
        elseif v == 2
            # Вторая вершина находится в правом верхнем углу — точка сдвигается туда
            x = width/2 + (width/2 - x)/2
            y = height - (height - y)/2
        else
            # Третья вершина в правом нижнем углу — точка сдвигается туда
            x = width - (width - x)/2
            y = y / 2
        end

        # Перемещаем черепашку в новые координаты (ось Y инвертирована из-за системы координат картинки)
        Reposition(t, x, height-y)

        # Рисуем маленький кружок (точку) радиусом 3 пикселя
        Circle(t, 3)
    end
end
chaos (generic function with 1 method)

Вызов функции и завершение рисования

Вызов основной функции, выполняющей алгоритм, завершение рисования, сохранение и открытие созданного файла

chaos()

finish()

preview()
No description has been provided for this image

Заключение

В этом примере мы реализовали алгоритм для построения треугольника Серпинского с использованием библиотеки Luxor в языке программирования Julia. Мы сгенерировали случайное множество точек, которое постепенно формирует фрактал. Такая реализация демонстрирует мощь простых итеративных методов и позволяет наглядно увидеть возникновение сложных геометрических структур из хаотичных действий. Этот пример может быть полезен как демонстрация основ фрактальной графики, программирования на Julia и работы с графикой.

Пример разработан с использованием материалов Rosetta Code