ПредишенСледващото

Двама изпълнителни итерирания функционални системи

Повтори система функция (CIF, повтори функции система) - това е средство за получаване на фрактални структури.
Най-простият CIF състои от афинни трансформации на равнината. (Припомни, че афинно преобразуване на координати - обикновено е наслагване на мащабиране, ротация, успоредна превод и огледало).
В обща афинно преобразуване на равнината определя от следните уравнения:

X '= A * X + B * Y + E
Y '= C * X + D * Y + F

Броят на уравнения, използвани за получаване на фрактален структура, най-малко две. Така фрактален решетка (. Решетка, Фигура 1) са взети следните четири системи:

(1, вероятността за избор 0.25)
X '= 0.3 * X - 0,3 * Y + 1
Y '= 0,3 * X + 0,3 * Y + 1

(2, 0.25 вероятност за селекция)
X '= 0.3 * X - 0,3 * Y + 1
Y '= 0,3 * X + 0,3 * Y - 1

(3, вероятността за избор 0.25)
X '= 0.3 * X - 0,3 * Y - 1
Y '= 0,3 * X + 0,3 * Y + 1

(4, 0.25 вероятност за селекция)
X '= 0.3 * X - 0,3 * Y - 1
Y '= 0,3 * X + 0,3 * Y - 1

Фиг. 1. Fractal грил (построен като растерно изображение)

Всяка система се нарича CIF трансформация.
СРН прилага свиваеми афинни трансформации, т.е. тези, в които коефициентът на мащабиране е по-малко от единица.

Алгоритъм за построяване на CIF-фрактал:

  1. Намери и боя отправната точка (X, Y) на изображението (началната точка на алгоритъма за търсене на е дадена по-долу).
  2. Изберете, с помощта на известна вероятност за избор на една от CIF-трансформации, за да намерите координатите (X ', Y ") на нова точка на изображението и да нарисува намери точката.
  3. Вземете X = X 'и Y = Y ".
  4. Повторете стъпки 2 и 3, предварително определен брой пъти алгоритъма.

Като начало може да приеме всяка притежавана точка на изображението. На следващата отправна точка алгоритъм за търсене предоставя избора си в това, което се нарича атрактор. т.е. в областта, принадлежащи към образа на фрактал. Всички следващи точки намерени от по-горе алгоритъм за построяване на CIF-фрактал, блуждаят в атрактор, не се движат в района, не принадлежат към изображението.

В търсене на алгоритъм за начална точка:

  1. Mark произволна точка (х, у) на самолета.
  2. Изберете, при използване на известни вероятност за избор на една от CIF-трансформация и да намерят координатите (X ', Y') до точка.
  3. Вземете X = X 'и Y = Y ".
  4. Повторете стъпки 2 и 3 на алгоритъма предварително определен брой пъти (например, 100).
  5. Марк като отправна точка последната точка.

Като се има предвид всеки CIF преобразуване отделно, може да се види, че независимо от позицията на началната точка, след няколко повторения сочат спре да се движи. спиране точка се нарича фиксирана точка.
Фиксираната точка превръщането на всяка част от атрактор. Ето защо, отправна точка за изграждане на фрактал може да отнеме фиксирана точка, например, първо се трансформира.
CIF може да се запише по-компактно в следната таблица:

В последната колона за всяка CIF реализация показва вероятността за селекция при търсене на следващата точка на фракталната изображение.
В примера, тези вероятности са равни, които, обаче, не е типично.

Следният код осигурява изхода е показано на фиг. 1 фрактален мрежа.

глобалните инвестиционни фондове, XP, YP, ifsCnt
глобален XI, И, ХА, Ya
-- Изчислява координати на точка изображение фрактал на
-- X и Y параметри се предават чрез позоваване
Fn афинния цв х у = (
т = х * цв [1] + у * цв [2] + колона [5]
у = х * цв [3] + у * цв [4] + колона [6]
х = т
)
-- Намира отправната точка на изображението
Fn sPoint = (
-- Направете първата CIF-конверсия
колона = за к = 1 до 6 събира IFS [к]
-- След 100 повторения XP и YP - координатите на началната точка
за к = 1 до 100 направи афинно колона XP YP
)
-- Избира от случайното число и вероятността за избор на сензора,
-- CIF превръщане за изчисляване на координатите на следващата точка изображението
Fn findK12 K11 K22 = (
-- Получаване на случайно число в интервала 0.0 - 1.0
R = случаен 0,0 1,0
р = 0,0
-- J2 - броя на редовете в таблицата трансформации NRF
J2 = ifsCnt / 7
J3 = J2 - 1
за к = 1 до J3 задачи (
P + = IFS [7 * J]
ако R <= p then (j2 = j; exit)
)
-- Индекси на начало и край на избрания ред на трансформации на маса CIF
K11 = 7 * (J2 - 1) + 1
K22 = K11 + 5
)
-- Той открива фрактал граница на изображението и определя конкретен порт в тези граници
-- Освен това, тези граници се използват за да мащабирате изображението
-- и конверсия координати на текущото място
Fn fConv nPAll = (
местно k1, k2
хА = Ya = -1e3
Xi = ил = 1e3
sPoint ()
за к = 1 до nPAll направи (
findK12 k1 k2
колона = за т = k1 да k2 събира IFS [М]
афинния цв XP YP
хА = AMAX # (XP, Ха); Ya = AMAX # (YP, Ya)
Xi = амин # (XP, XI); ил амин = # (YP, ил)
)
viewport.ZoomToBounds фалшива [XI, 0, ил] [хА, 0, Ya]
)
-- Генерира фрактални точки с изображения на nPAll
Fn showFrctB = (
-- Масив от четири CIF-preorazovany посочва фрактал решетка
-- Таблица отразява CIF-preorazovany
IFS # = (0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25)
ifsCnt = ifs.Count
-- nPAll - броя на точките, по образа на фрактал
nPAll = 10000
XP = YP = 1.0
fConv nPAll
BSZ = 200
-- Създаване на растерни изображения с размер 200 х 200 пиксела
btmp = растерни BSZ цвят BSZ: бял
-- Коефициентите за преобразуване на координатна точка на изображението
-- Изображението се вписва в посочения растерни изображение
с = 0,8
CX = C * BSZ / (Ха - XI)
CY = C * BSZ / (Я - ил)
г = 0,5 * (1.0 - в) * BSZ
CLR = цвят 0 0 255
k1 = k2 = 0
-- NPAll получи изображение точки
-- и ги фиксирайте под формата на сини пиксели на растерното изображение btmp
-- Произходът на растерното изображение в горния ляв ъгъл
за к = 1 до nPAll направи (
-- Изборът CIF преобразуване
findK12 k1 k2
колона = за т = k1 да k2 събира IFS [М]
-- Намираме координатите на точка в изображението
афинния цв XP YP
Хь = г + CX * (XP - XI)
Yb = BSZ - (г + Су * (YP - ил))
setPixels btmp [Xb, Yb] # (CLR)
)
-- Показва резултатите (вж. Фиг. 1)
показване btmp
)
showFrctB ()

Run се изпълнява в 3ds Max в следния ред:

За други изображения е достатъчно да се определи набор от IFS други подходящи данни. Тези данни могат да бъдат получени от кода в участъка след "Събиране на поток от частици-фрактали." Например, ако масив от данни, за да се определи IFS осма рисунка

IFS = # (0.824074, 0.281482, -0.212346, 0,864198, -1.882290, -0.110607, 0,787473,
0.088272, 0.520988, -0.463889, -0.377778, 0,785360, 8,095795, 0.212527)

Програмата ще създаде растерни изображения на фракталната дракона (фиг. 2).

Фиг. 2. След смяна IFS масив

В образуването на фрактал на поток от частици CIF-частица има допълнителни възможности за управление на изображения, в резултат на поток от частици наличните ресурси.
По-долу е код за генериране NRF кръстовидна решетка от частици (фиг. 3).

Фиг. 3. фрактален решетката (изграден от частици)

За разлика от предишния вариант извод извършва в оператора на пристъпи процесор система script_Operator частиците потока от частици се насочва в изгледа. Това определя позицията на новосъздадените частици. Поставете старата частица остава непроменен.
Код, както в случая на растерно изображение, основано на горните алгоритми за изграждане на образа CIF.

глобалните инвестиционни фондове, nPPrev, XP, YP, ifsCnt
-- етап подготовка
функционални tSttngs = (
изтриете $ *
viewport.SetLayout # layout_4
viewport.ActiveViewport = 2
viewport.SetType #view_front
2 фалшива viewport.SetGridVisibility
sliderTime = 0f
animationRange = интервал 0f 50f
timeConfiguration.RealTimePlayback = фалшива
timeConfiguration.PlaybackLoop = фалшива
)
глобалните инвестиционни фондове, XP, YP, ifsCnt
глобален XI, И, ХА, Ya
-- Изчислява координати на точка изображение фрактал на
-- X и Y параметри се предават чрез позоваване
Fn афинния цв х у = (
т = х * цв [1] + у * цв [2] + колона [5]
у = х * цв [3] + у * цв [4] + колона [6]
х = т
)
-- Намира отправната точка на изображението
Fn sPoint = (
-- Направете първата CIF-конверсия
колона = за к = 1 до 6 събира IFS [к]
-- След 100 повторения XP и YP - координатите на началната точка
за к = 1 до 100 направи афинно колона XP YP
)
-- Избира от случайното число и вероятността за избор на сензора,
-- CIF превръщане за изчисляване на координатите на следващата точка изображението
Fn findK12 K11 K22 = (
-- Получаване на случайно число в интервала 0.0 - 1.0
R = случаен 0,0 1,0
р = 0,0
-- J2 - броя на редовете в таблицата трансформации NRF
J2 = ifsCnt / 7
J3 = J2 - 1
за к = 1 до J3 задачи (
P + = IFS [7 * J]
ако R <= p then (j2 = j; exit)
)
-- Индекси на начало и край на избрания ред на трансформации на маса CIF
K11 = 7 * (J2 - 1) + 1
K22 = K11 + 5
)
-- Той открива фрактал граница на изображението и определя конкретен порт в тези граници
-- Освен това, тези граници се използват за да мащабирате изображението
-- и конверсия координати на текущото място
Fn fConv nPAll = (
местно k1, k2
хА = Ya = -1e3
Xi = ил = 1e3
sPoint ()
за к = 1 до nPAll направи (
findK12 k1 k2
колона = за т = k1 да k2 събира IFS [М]
афинния цв XP YP
хА = AMAX # (XP, Ха); Ya = AMAX # (YP, Ya)
Xi = амин # (XP, XI); ил амин = # (YP, ил)
)
viewport.ZoomToBounds фалшива [XI, 0, ил] [хА, 0, Ya]
)
Fn showFrct = (
-- Масив от четири CIF-preorazovany посочва фрактал решетка
-- Таблица отразява CIF-preorazovany
IFS # = (0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25,
0.3, -0.3, 0.3, 0.3, 1, 1, 0.25)
ifsCnt = ifs.Count
-- nPAll - броя на точките, по образа на фрактал
местно nPAll = 10000, EMS = 0,8 * 160 * 50
XP = YP = 1.0
fConv nPAll
nPPrev = 1
-- Създаване на източник на частиците с операторите на раждане (раждане)
-- и показване (DisplayParticles) частици
-- Също така, източник на частиците имат оператор script_Operator,
-- осигуряване на определяне на координатите на новородените частици
PF = PF_Source enable_Particles: вярно emitter_Type: 0 \
quantity_Viewport: 100 show_Logo: разстояние show_Emitter: разстояние
particleFlow.BeginEdit ()
opBth = раждане emit_Start: 0 emit_Stop: EMS сума: nPAll
-- Се показва в частица Прозорецът порт кръстовидна (тип = 2)
opDP = displayParticles цвят: синьо тип: 2
opSO = script_Operator proceed_Script: "
-- Информационните канали
на channelsUsed PCont правя (
pCont.UseTime = вярно
pCont.UsePosition = вярно
)
на пристъпи PCont направи (
k1 = k2 = 0
NP = pCont.NumParticles ()
-- Параметър nPPrev въведена за намаляване на бюст
за к = nPPrev да направи NP (
pCont.ParticleIndex = к
-- Вземете само нови частици
ако pCont.ParticleNew правя (
-- Изборът CIF преобразуване
findK12 k1 k2
колона = за т = k1 да k2 събира IFS [М]
-- Намираме координатите на частицата (следващата точка на изображението)
афинния цв XP YP
pCont.ParticlePosition = [XP, 0, YP]
)
)
nPPrev = NP
) "
EVN = събитие ()
particleFlow.EndEdit ()
evn.AppendAction opBth
evn.AppendAction opDP
evn.AppendAction opSO
pF.AppendInitialActionList EVN
playAnimation ()
)
-- готвене сцена
tSttngs ()
-- изграждане на имидж
showFrct ()

Сега добавете етап бомба, който духа на 10-ия кадър и избухна трае 25 кадъра:

пб = PBomb симетрия: 0 хаоса: 10 START_TIME: 10е lasts_For: 25f сила: 0.1

От своя счетоводен добави източникът на частиците следните изявление Force:

opFrc = сила force_Space_Warps: # (Pb) влияние: 25

Поставете следния код преди метод AppendInitialActionList:

Наблюдаваните резултати са показани на фиг. 4.

Фиг. 4. Настържете с бомбата (на 40-кадър от анимацията)

Следният код изгражда фрактални обекти, основани повтори системи функция (CIF) и множество фрактален Манделброт и Julia (фиг. 5 и 6).

Фиг. 5. определя Манделброт

Фиг. 6. Джулия комплекти

Фиг. 7. Ръководителят на диалог

Фиг. 8 показва две частици конструирани от CIF-фрактален.

Фиг. 8. CIF-люспи фрактали и стрелка

Броят на изпълненията на CIF изображение не се ограничава само до тях. Освен това, в някои случаи е възможно да се регулира изходното реда на графични точки преди това с посочване на техните координати в масива. На следващо място, на масива може да се сортира, например, Y-координира и изпълнява сериен изход на сортираните точки. Тази техника, по-специално, да се използва "Сезони. Есен" конкуренция "на живо картина", за да се покаже по-голям дърво.

Свързани статии

Подкрепете проекта - споделете линка, благодаря!