|
L-системы
Построение снежинки Коха, дракона Хартера-Хайвея, деревьев производится с помощью L-систем. L-системы часто называются ещё и системами черепашьей графики.
Черепашья графика - это способ рисования линий на экране компьютера. Он состоит в том, что программист как бы управляет движением черепашки. Черепашка, ползая по экрану, оставляет за собой след. При этом цель программиста – управлять черепашкой так, чтобы черепашка нарисовала нужную линию. Команды управления черепашкой просты: сделать шаг вперёд (обозначается F), повернуть направо (обозначается +), повернуть налево (обозначается -), сделать шаг вперёд без перерисовки (прыжок, обозначается B). Вот из этих команд и составляется сценарий построения линии – строка команд. Величина одного шага и угол одного поворота при движении черепашки всегда остаются постоянными и задаются предварительно.
Например, F++F++F это равносторонний треугольник, если угол поворота равен pi/3, а F+F+F+F – это квадрат, если угол поворота равен pi/2 .
Построение L-системы происходит в три этапа.
- Сначала создаётся сценарий поведения черепашки.
- Потом подсчитывается размер линии, которая получится, если запустить этот сценарий на исполнение. Линия как бы рисуется в уме, а потом смотрится её размер. На основе этого размера подправляется масштаб, чтобы вся линия уместилась на экране.
- На экран запускается черепашка, которая рисует линию.
Фракталы – самоподобные фигуры, значит, и сценарии у них должны быть самоподобные.
- Берётся начальная фигура (называется - аксиома), например,
F++F++F с углом pi/3 .
- Задаётся правило замены F (называется правило newF) , например,
newF = F-F++F-F ;
- В имеющейся фигуре (в сценарии) все F заменяются на newF. В нашем примере получим
F-F++F-F++F-F++F-F++ F-F++F-F
- Повторяем предыдущий шаг 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
Деревья.
У деревьев есть ветки. Тут имеющимся набором команд не обойдёшься. Приходится вводить ещё пару команд: начало ветви (обозначается [ ), конец ветви (обозначается ] ). В начале ветви черепашка должна запомнить своё состояние (положение и направление взгляда), а когда ей встретится соответствующий конец ветви, она должна вернуться в то положение, которое запомнила.
Вот, например, данные для построения куста.
axiom = F
newF = -F+F+[+F-F-]-[-F+F+F]
turn = pi / 8
Для трёх шагов получим такую картинку -> |
|
|
|