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 )
