Алгоритм системы можно коротко описать следущим образом.
Вход:
axiom - начальное слово
newf - первое правило
newb - второе правило
l - число шагов
n - длина слова
T - массив
Выход:
word - слово - результат
Инициализация:
W = axiom
T = {} - пустая строка
Шаги:
while l > 0
for j = 1 to n
if W (j) = + , { T + }, end if
if W (j) = - , { T - }, end if
if W (j) = [, T = {T [}, end if
if W (j) = ], T = {T ]}, end if
if W (j) = F, T = {T newf }, end if
if W (j) = b, T = { T newd } , end if,
end for
W = T, l = l - 1
end while
word = W
В данном алготме переменная W(j) означает j-ую букву в слове word, { T + } - строка Т, к которой добавлен знак + . система действует по следующему алгоритму.
Вход:
word - результат работы предыдущего алгоритма
a - начальное направление
0 - приращение по углу
Выход:
Графическое представление word
Инициализация:
W = word
x0 = 0, y0 = 0, n = length ( word )
stack = {} - пустой стек
Шаги:
for j = to n
if W (j) = + , a = a + 0, end if
if W (j) = - , a = a - 0, end if
if W (j) = - F, x = x0 + cos a, y = y0 + sin a
paint ( x0, y0; x, y) - провести линию из точки (x0, y0)
в точку (x, y)
x0 = x, y0 = y, end if
if W (j) = b, x = x0 + cos a, y = y0 + sin a, end if
if W (j) = [ , l = length (stack),
stack (l + 1, 1) = x0, stack ( l + 1, 2 ) = y0, stack (l + 1, 3) =
a, end if
if W (j) = ] , l = length ( stack ),
stack (l, 1) = x0, stack ( l, 2) = y0, stack ( l, 3) = a
del (l) - удалить l - ую запись из стека, end if
end for
В данном алгоритме при открытии ветви сохраняется значение координат и угла ( x, y, a)
в стеке, а затем система возвращается к этим значениям при закрытии ветви, при этом запись ( x, y, a ) из удаляется.
Данные алгоритм, будет вычерчивать диаграммы-узоры.