Sierpinski的三角形(混沌游戏)
本示例讨论了使用卢克索图形库在Julia中构建Sierpinski三角形的算法的实现。
导言
Sierpinski三角形算法是一个简单的迭代过程,用于生成分形。 尽管其明显的简单性,这种方法允许您创建复杂和美丽的几何结构。 该算法基于预定义点(顶点)之一的随机选择以及在距当前位置一定距离处的新点的后续构造。 通过多次重复这个过程,我们得到了分形集的可视化。
主要部分
安装外部卢克索软件包,如果尚未安装
    In [ ]:
import Pkg; Pkg.add("Luxor")
连接卢克索库以处理图形
    In [ ]:
using Luxor
实现混沌博弈算法的函数定义
    In [ ]:
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
Out[0]:
调用函数并完成绘图
调用执行算法的主函数,完成绘图,保存并打开创建的文件
    In [ ]:
chaos()
finish()
preview()
Out[0]:
结论
在本例中,我们使用Julia编程语言中的Luxor库实现了一种构建Sierpinski三角形的算法。 我们生成了一组随机点,逐渐形成分形。 这个实现展示了简单迭代方法的力量,并使得从混乱的动作中直观地看到复杂几何结构的出现成为可能。 这个例子可以作为分形图形、Julia编程和图形处理的基础知识的演示。
该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Chaos_game )
