Pull to refresh

Простой способ построения фракталов в Corel Draw с использованием скриптов

В последнее время фракталы широко используются для моделирования реальных объектов в компьютерной графике. Это связано с тем, что физические процессы, происходящие в реальном мире носят фрактальный характер. К примеру, многие растения в природе развиваются по степенным законам, а это как известно один из основных источников самоподобных структур. Процессы конденсации и фазовые переходы так же вносят свой вклад в красоту реального мира. Узоры на стекле или снежинки — яркие представители фрактальных объектов в природе.

Многие програмные пакеты 3D графики используют эти принципы для моделирования растений, деревьев, травы. Всем известный 3D Studio MAX использует расширение L — системы для построения деревьев. L — системы позволяют достичь максимального реализма в таких задачах. Фракталы так же применяют для построения реалистичных ландшафтов, что часто используется в компьютерных играх. Такого софта в настоящее время очень много и он удовлетворит самым требовательным пользователям.

Принцип построения L-систем очень прост: описываются базовые операции на плоскости или пространстве, которые затем много раз повторяются, в результате строятся самоподобные древовидные структуры.
Я хочу коснуться простого способа построения фрактальных фигур в Corel Draw с использованием vba скрипта. Самым простым способом в данном случае является многократное деления отрезка прямой пополам и смещения узловых точек случайным образом. Однако у этого алгоритма есть определенные недостатки, в частности, не всегда просто получается реализовать данным алгоритм в прикладных задачах. Если для этой же задачи использовать известную функцию Вейерштрасса, то задача слегка упрощается. Как известно данная функция была открыта Вейерштрассом и Мандельбротом. Она непрерывна, но не в одной точке не имеет производной. Подробнее об этой функции можно почитать здесь. Мы используем фрактальные свойства этой функции для построения фрактальной кривой.

Вот простейший скрипт, который строит окружность, обладающую фрактальной геометрией:

Собственно, функция Вейерштрасса:

Function WS(N As Integer, D As Double, B As Double, t As Double) As Double
S = 0
For i = -N To N
S = S + (1 - Cos((B ^ N) * t)) / (B ^ ((2 - D) * N))
Next
WS = S
End Function


А это скрипт построения окружности:

Sub PR()
R = ActiveDocument.Pages(0).TopY / 4
x = ActiveDocument.Pages(0).RightX / 2
y = ActiveDocument.Pages(0).TopY / 2
Dim crv As Curve
Pi = 3.1416
Set crv = ActiveDocument.CreateCurve
With crv.CreateSubPath(x + R * Cos(0), y + R * Sin(0))
For i = 0.01 To 2 * Pi Step 0.05
.AppendLineSegment x + (R + 0.05 * WS(100, 1.9, 1.5, i / (50 * Pi))) * Cos(i) + 0.01 * Rnd(1), y + (R + 0.05 * WS(100, 1.9, 1.5, i / (50 * Pi))) * Sin(i) + 0.01 * Rnd(1)
Next
End With
crv.Closed = True
Dim s1 As Shape
Set s1 = ActiveLayer.CreateCurve(crv)
s1.Fill.ApplyNoFill
s1.Outline.SetProperties 0.007874, OutlineStyles(0), CreateCMYKColor(0, 0, 0, 100), ArrowHeads(0), ArrowHeads(0), cdrFalse, cdrFalse, cdrOutlineButtLineCaps, cdrOutlineMiterLineJoin, 0#, 100, MiterLimit:=5#
End Sub


Подобный скрипт можно использовать для фрактализации различных кривых путем простой модификации.
Второй параметр в функции Вейерштрасса это фрактальная размерность. Как известно, чем больше фрактальная размерность, тем больше объект похож на фрактал. Так же, в данном скрипте добавлены случайные величины для имитации шума. Разумеется, существуют более сложные и эффективные способы построения фракталов.
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.