Построение снежинки Коха, дракона Хартера-Хайвея, деревьев производится с помощью L-систем. L-системы часто называются ещё и системами черепашьей графики.

        Черепашья графика - это способ рисования линий на экране компьютера. Он состоит в том, что программист как бы управляет движением черепашки. Черепашка, ползая по экрану, оставляет за собой след. При этом цель программиста – управлять черепашкой так, чтобы черепашка нарисовала нужную линию. Команды управления черепашкой просты: сделать шаг вперёд (обозначается F), повернуть направо (обозначается +), повернуть налево (обозначается -), сделать шаг вперёд без перерисовки (прыжок, обозначается B). Вот из этих команд и составляется сценарий построения линии – строка команд. Величина одного шага и угол одного поворота при движении черепашки всегда остаются постоянными и задаются предварительно.

        Например, F++F++F это равносторонний треугольник, если угол поворота равен pi/3, а F+F+F+F – это квадрат, если угол поворота равен pi/2 .

        Построение L-системы происходит в три этапа.

o    Сначала создаётся сценарий поведения черепашки.

o    Потом подсчитывается размер линии, которая получится, если запустить этот сценарий на исполнение. Линия как бы рисуется в уме, а потом смотрится её размер. На основе этого размера подправляется масштаб, чтобы вся линия уместилась на экране.

o    На экран запускается черепашка, которая рисует линию.

        Фракталы – самоподобные фигуры, значит, и сценарии у них должны быть самоподобные. 

o    Берётся начальная фигура (называется - аксиома), например, F++F++F с углом pi/3 .

o    Задаётся правило замены F (называется правило newF) , например, newF = F-F++F-F ;

o    В имеющейся фигуре (в сценарии) все F заменяются на newF. В нашем примере получим

F-F++F-F++F-F++F-F++ F-F++F-F

o    Повторяем предыдущий шаг N раз. На втором шаге мы получим

F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F

Деревья.

        У деревьев есть ветки. Тут имеющимся набором команд не обойдёшься. Приходится вводить ещё пару команд: начало ветви (обозначается [ ), конец ветви (обозначается ] ). В начале ветви черепашка должна запомнить своё состояние (положение и направление взгляда), а когда ей встретится соответствующий конец ветви, она должна вернуться в то положение, которое запомнила.

        Рассмотрим пример, иллюстрирующий применение команд ветвления в L-системах, при построении фрактала «Куст». Запишем построение данного фрактала в виде таблицы.

 

Вход

Аксиома (axiom)

F

Порождающее правило (newf)

‘FFF[+F[+++F][-F][+F]][-F[---F][-F][+F]]’

Начальный угол (α)

π/2

Угол поворота (θ)

π/4

        Построение аксиомы.

        Будем считывать каждый символ, и наблюдать за действиями черепашки.

Символ

F

F

F

[

+

F

[

+

+

+

F

]

[

-

F

]

[

+

F

]

]

[

Номер символа

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Символ

-

F

[

-

-

-

F

]

[

-

F

]

[

+

F

]

]

 

 

 

 

 

Номер символа

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

 

 

 

 

 

        То, как «двигается» черепашка при прочтении символов
F, –, +, описано выше.

        Запишем построение первой итерации данного фрактала в виде таблицы.

Состояние

Действие

Стек

начальное

Находится в (x0, y0)

пустой

1-й симв.

Переход в (x1, y1)

пустой

2-й симв.

Переход в (x2, y2)

пустой

3-й симв.

Переход в (x3, y3)

пустой

4-й симв.

Записать в стек

(x1, y1, α)

5-й симв.

Поворот

(x1, y1, α)

6-й симв.

Переход в (x4, y4)

(x1, y1, α)

7-й симв.

Записать в стек

(x1, y1, α)

8-й симв.

Поворот

(x1, y1, α)

9-й симв.

Поворот

(x1, y1, α)

10-й симв.

Поворот

(x1, y1, α)

11-й симв.

Переход в (x5, y5)

(x1, y1, α)

12-й симв.

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

13-й симв.

Записать в стек

(x1, y1, α)

14-й симв.

Поворот

(x1, y1, α)

15-й симв.

Переход в (x6, y6)

(x1, y1, α)

16-й симв.

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

17-й симв.

Записать в стек

(x1, y1, α)

18-й симв.

Поворот

(x1, y1, α)

19-й симв.

Переход в (x7, y7)

(x1, y1, α)

20-й симв.

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

21-й симв.

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

22-й симв.

Записать в стек

(x1, y1, α)

23-й симв.

Поворот

(x1, y1, α)

24-й симв.

Переход в (x8, y8)

(x1, y1, α)

25-й симв

Записать в стек

(x1, y1, α)

26-й симв

Поворот

(x1, y1, α)

27-й симв

Поворот

(x1, y1, α)

28-й симв

Поворот

(x1, y1, α)

29-й симв

Переход в (x9, y9)

(x1, y1, α)

30-й симв

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

31-й симв

Записать в стек

(x1, y1, α)

32-й симв

Поворот

(x1, y1, α)

33-й симв

Переход в (x10, y10)

(x1, y1, α)

34-й симв

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

35-й симв

Записать в стек

(x1, y1, α)

36-й симв

Поворот

(x1, y1, α)

37-й симв

Переход в (x11, y11)

(x1, y1, α)

38-й симв

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

39-й симв

Считать из стека, переход в считанные координаты, удаление считанной записи (вернулись в координаты (x1, y1))

пустой

        В результате получаем:

       

        Пример художественной композиции: