значення з стека видаляються. У пакеті MATLAB виявляється більш зручним використовувати матрицю з перемінним числом стовпців:
В
причому координати кожної нової точки розгалуження додаються в новий стовпець матриці M. Після закриття гілки змінним (x, y ,?) присвоюються значення, лічені з останнього стовпця матриці M, потім цей стовпець видаляється.
Таким чином, розгалуження задається двома символами:
[- відкрити гілку: додати вектор
] - закрити гілку: присвоїти змінним
(x, y ,?) значення координат вектора, який є останнім стовпцем матриці M.
Приклад фрактала, побудованого за допомогою операції розгалуження, представлений на малюнку 24. Нижче наводиться лістинг файлу Flower.m, що містить опис функції, що повертає зображення квітки, відповідно до описаної вище L-системою. br/>
.3.1 Код програми "Flower.m"
% Лістинг файлу Flower.m
function [X, Y] = Flower (Lmax)
% функція, що повертає зображення квітки
% Lmax - порядок квітки
% породжують правила
Axiom = 'F [+ F + F] [-FF] [+ + F] [-F] F';
Newf = 'FF [+ + F] [+ F] [F] [-F] [-F]';
teta = pi/16; = pi/2; = [0, 0];% початкова точка
Coord (p, Lmax, Axiom, Newf, alpha, teta);
% звернення до функції, що повертає
% зображення квітки
function z = Coord (p, Lmax, Axiom, Newf, alpha, teta)
% функція, що повертає зображення квітки = FlowerString (Lmax, Axiom, Newf, 1, '');
% завдання L - системи (1); hold on; = length (Rule), L = 0; x0 = p (1); y0 = p (2); i = 1: MRule ( i) == 'F'% крок вперед = x0 + cos (alpha); y1 = y0 + sin (alpha); = [x0, x1]; Y = [y0, y1]; x0 = x1; y0 = y1; (X, Y, 'Color', 'k'); end
if Rule (i) == '+'% збільшення кута, що задає напрямок руху
alpha = alpha + teta; Rule (i) == '! '% Зменшення кута, що задає напрямок руху
alpha = alpha-teta; Rule (i) == '[';% відкрити ветвьL == 0 St = [x0; y0; alpha], L = 1; else St = cat (2 , St, [x0; y0; alpha]); endRule (i) == ']'% закрити гілку = size (St, 2); R = St (1:3, M: M); = R (1) ; y0 = R (2); = R (3); St = St (1:3,1: M-1); offz = FlowerString (Lmax, Axiom, Newf, n, tmp)
% функція, що повертає L - сістемуn <= Lmax
if n == 1 = Axiom; n = n +1; else = strrep (tmp, 'F', Newf); = n +1; tmp = Fl...