Мастер класс.
Формирование фракталов с помощью макросов

на языке  *.
vbs (или *.js) и методов авторской системы Вектор

Предыдущее занятие 

Итак фрактал можно охарактеризовать как процесс рекурсивного замещения в чём-то, чего-то, чем-то с прицепом.

в  чём-то –полилинии, поверхности, 

чего-то - отрезки полилинии, ячейки поверхности

чем-то  - полилинии, полиповерхности и т.п.

с прицепом  - любой объект.

Метод:

FractalTopolyline(short i_obj1, short i_obj2, short i_obj3, short b2obj,short bScale, short istep, short numer, LPDISPATCH pVec)

Где:

short i_obj1 генератор

short i_obj2 инициатор (группа или полилиния автоматически выбираются)

short i_obj3 - прицеп  номер в структуре

short b2obj =  прицеп - 1 - есть прицеп, 2-нет прицепа 

short bScale =1 - нет масштаба 2 - есть масштаб,

short istep - шаг (число) через которое выполняется замещение

short numer) – номер отрезка для которого выполняется замещение

LPDISPATCH pVec – вектор направление замещаемого объекта (прицепа), в случае вектор нулевой – признак не работает.

 

Проведем тестирование

Тест 1. Выполнить замещение отрезков в полилинии (инициатор) другой полилинией (зигзагом) (генератор) – два объекта задаем в диалоге.

 

МК Фрактал-замещение 1.vbs на входе иницатор (куда) и генератор (что)

VBSMsg "Замещение отрезков в полилинии (или группы) другой полилинией с прицепом или без прицепа"

Set N =p(0,0,0)

n1 = LastNmb

FractalTopolyline n1, n1-1, 2, 1, 1, 1,N

   

  -> ->

Слева задано, в центре МК отработала, справа - только фрактал 

 

Тест 2. Выполнить замещение отрезков полилинии другой полилинией с прицепом

Прицеп может – любой объект (возьмем портрет Пушкина в dxf-формате), генератор здесь полилиния (отрезок-полилиния), определяющая расположение объекта в замещаемом пространстве.

Set N =p(0,0,0)

  FractalTopolyline n1-1, n1-2, n1, 1, 1, 1,1,N  ' тест 2 прицеп с Пушкиным

 

 

Тест 3. Выполнить замещение отрезков полилинии другой полилинией с прицепом (без масштаба).

FractalTopolyline n1-1, n1-2, n1, 1, 0, 1,1,N    ' тест 3 масштаб не меняется.

 

 

Тест 4. Выполнить замещение отрезков полилинии другой полилинией с прицепом (без масштаба) с шагом.

Set N =p(0,0,0)

FractalTopolyline n1-1, n1-2, n1, 1, 2, 1,1,N    ' тест 3 масштаб не меняется (c шагом = 2(1+1)).

 

В структуре не нужное выключить (удалить),

Тестирование инициатор, как группа – аналогично полилинии.

 

Вот еще раз проверили – собрали в универсальную МК. Чтобы запустить тот или иной вариант, надо раскомментарить соответствующие строки.

 

 VBSMsg "1.Замещение отрезков в полилинии полилинией без прицепа"

'VBSMsg "2.Замещение отрезков в полилинии полилинией с прицепом масштаб разный"

'VBSMsg "2.2.Замещение отрезков в полилинии полилинией с прицепом масштаб постоянный"

'VBSMsg "3.1.Замещение отрезка в полилинии по номеру полилинией с прицепом масштаб разный"

'VBSMsg "3.2.Замещение отрезка в полилинии по номеру полилинией с прицепом масштаб постояныый"

n1 = LastNmb

CurrObjNmb = n1

Set N =p(0,0,0)

FractalTopolyline n1, n1-1, 2, 1, 1, 1,-1,N ' 1) без прицепа в структуре  инициатор и затем генератор с шагом 2 (на самом деле =1)

'FractalTopolyline n1, n1-1, 2, 1, 0, 1,-1,N ' 1) без прицепа в структуре  инициатор и затем генератор с шагом 2 (на самом деле =1 м=с)

'FractalTopolyline n1-1, n1-2, 2, 1, 1, 1,-1,N ' 1) без прицепа в структуре  прицепа и есть прицеп но др объектов не должно быть - работает

'FractalTopolyline n1-1, n1-2, n1, 1, 1, 1,-1,N ' 2.1) с прицепом с Пушкиным масштаб разный

'FractalTopolyline n1-1, n1-2, n1, 1, 0, 1,-1,N ' 2.2) с прицепом с Пушкиным масштаб постоянный

'FractalTopolyline n1-1, n1-2, n1, 1, 1, 1,2,N ' 2.2) по номеру с прицепом с Пушкиным масштаб разный

'FractalTopolyline n1-1, n1-2, n1, 1, 0, 1,2,N ' 2.2) по номеру с прицепом с Пушкиным масштаб постоянный

 

Set N =p(0,1,0) ' по заданному направлению.

'FractalTopolyline n1-1, n1-2, n1, 1, 0, 1,2,N ' 2.2) по номеру с прицепом с Пушкиным масштаб постоянный

FractalTopolyline n1-1, n1-2, n1, 1, 1, 1,-1,N ' 2.1) с прицепом с Пушкиным масштаб разный

 Вариантов много, однако они повторяют задания фракталов в диалоге и, сделав планируемый блок универсальных МК, это облегчит освоение фракталов и работу с ними. Особенно в случае тактильного их применения.  

 

 

 

Примеры.

Фрактал Серпинского методу FractalTopolyline

 

К последней группе в структуре можно продолжить фрактал

  

Получен за три итерации, справа 3D без сторон треугольника

 

Фрактал Леви с помощью МК и метода. Хотя, сначала соберем его в диалоге, используем «прицеп».

Форма правильная получилась, однако из 5 отдельных частей*

В МК можно контур 5 частей соединить одной линией, но как говорится фокус не удался – прицеп попробуем задавать с отверстием, а внутри отверстия линия - генератор.  

 

       

Как видим (картинка слева), не получилось*.

Справа орел в качестве прицепа с генератором перескочил на инициатор 

 

      Есть идея, как проблему обойти. Добавить замещение полилинии отрезка в другой полилинии по номеру. В диалоге это в принципе лишнее – задавай генератор. Хотя стоп! генератор может быть сложная линия и она автоматически «вшивается» в инициатор – это нужная задача в многих приложениях в медицине шунтирование и прочего вживления. Так что нужна это задача и в диалоге. В МК в цикле применяя, можно конечно больше накрутить, и в случае и прицепа задача полезная и понятная. Особенно в случае сборки – направляй разные детали в разные места, получишь сборочную единицу. Причем раз написал МК – потом ее применяй постоянно. Эту проблему соискатели по кафедре в аспирантуру монголы статью написали: «Мониторинг многоуровневой структуризации в морской практике Монголии»  см. здесь. 

К 3D-фрактальной геометрии  см здесь