Регистрация - Вход

Реклама на сайте


Построение L-систем на плоскости в Python


L-системы - это один из способов описания и построения фракталов. L-системы часто называют черепашьей графикой. В основе L-систем лежит понятие черепашки, которая ползает по плоскости и выполняет ваши команды, одновременно рисуя линии.

Вот её базовые команды:

"F" - ползти вперёд.

"f" - ползти вперёд но не рисовать.

"+" - повернуть направо.

"-" - повернуть налево.

"[" - запомнить текущую позицию.

"]" - возврат в запомненную позицию.

Скобки "[" и "]" могут быть вложенными.

Перед запуском черепашки следует задать:

  • угол поворота для команд "+" и "-"

  • величину шага, на который она будет перемещается при командах "f" и "F"

  • начальное положение и начальный угол поворота

Например для построения равностороннего треугольника, угол поворота = 60, шаг = длине стороны треугольника, а команды будут следующими: "F+F+F"

Но это еще не всё. Для описания фрактала на языке L-системы нужно задать аксиому, которая определяет фрактал нулевого уровня (начальное положение системы) и правила замен (их может быть несколько).

Например, для кривой Коха:

аксиома - "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", и т.д. Для построения совершаем несколько шагов, а затем заставляем черепашку двигаться согласно полученным командам.

Кривая Коха

Теперь расскажу про реализацию в Питоне.

В стандартном дистрибутиве есть модуль turtle, который позволяет управлять черепашкой. Осталось только описать L-системы. Для этого я написал специальный модуль LSystem. Он предоставляет класс LSystem который содержит все необходимые методы.

Рассмотрим простой пример:

from LSystem import LSystem

import turtle

turtle.tracer(0)

ls = LSystem("F", {"F":"F-F++F-F"})

ls.generate(5)

ls.render(45,0.8,-185,0,0)

turtle._root.mainloop()

В строках 1-2 мы выполнили импорт нужных модулей. В строке 4 указали черепашке, что не нужно показывать, как она движется. В строке 6 создаём L-систему, первый параметр - аксиома, второй - правила в виде словаря Python. В строке 7 генерируем фрактал для пятого шага. В стоке 8 отрисовываем полученный фрактал. Первый параметр - угол поворота черепашки, второй - её шаг, третий и четвёртый - начальное положение X и Y (начало координат - в центре окна) и наконец пятый параметр - начальный поворот черепашки (по умолчанию она смотрит вправо). В строке 10 запускаем главный цикл, чтобы окно не закрылось.

Вот и все, что нужно чтобы изучать L-системы.

Я создал архив LSystem.zip который содержит модуль LSystem и три демонстрационных программы, кстати сам модуль тоже выполняет тестирующий код, запустите LSystem.py и вы увидите куст, растущий, прямо на глазах :)

Результат выполнения LSystem.py

Источники:

purepython.narod.ru


КОММЕНТАРИИ







Теги


RSS

Архив



создать масляные обогреватели фото. отделка откосов хороший каталог. галерея советской живописи советская живопись 20 века. Toyota туры во вьетнам. Ips туры во вьетнам. Туры во вьетнам установка.