Не бывает совершенной красоты без некоторого нарушения пропорции.

Фрэнсис Бэкон (Francis Bacon)

Путем дробления отрезков прямых можно создать множество интересных кривых. При самом простом подходе к генерации таких кривых используется так называемый метод L-систем (L-Systems) рисования сложных кривых, основанный на простом наборе инструкций [Smith, 188, Prusinkiewicz, 173].

В главе 3 мы уже видели, что можно «управлять черепахой» с помощью символьной строки. Черепаха «читает» строку и интерпретирует каждый символ как команду на выполнение некоторой операции. Зададим черепахе следующий набор команд: Т' forward(l, 1) переместиться вперед на расстояние 1 в текущем направлении Ч' turn(A) повернуть направо на угол А градусов

turn(-A) повернуть налево на угол А градусов Если, например, дана строка "F-F++F-F" и значение угла А равно 60°, то черепаха нарисует первую генерацию Kt кривой Коха, изображенную на рис. 9.1.

Но как превратить простую строку вида "F-F++F-F" в более длинную, которая создаст более сложную кривую? Этот процесс основывается на наборе инструкций создания строк (string-production rules), который мы включим в определяемую нами подпрограмму produceStringO. Правило для кривой Коха имеет вид:

F' -> "F-F++F-F"

где знак означает, что каждый встреченный символ "F" замещается группой символов "F-F++F-F". Для символов '+' или '-' инструкции отсутствуют, поэтому эти символы передаются без изменений. На рис. 9.5, а представлены две стадии процесса создания строк. На первой стадии исходная строка, называ-

Приближение к бесконечности

емая атомом (atom), а в данном случае это "F", «генерирует» строку первого поколения S1-"F-F++F-F", затем эта строка подается на вход того же самого процесса, который генерирует строку второго поколения:

S2-F-F++F-F-F-F++F-F++F-F++F-F-F-F++F-F.

Видно, что в этой строке можно выделить четыре группы, или кластера (clusters), вида "F-F++F-F", разделенные символами '-'.затем '++' и наконец снова '-'. Если теперь черепаха интерпретирует данную строку, то она нарисует вторую генерацию кривой Коха К2\


⇐ Предыдущая| |Следующая ⇒