L-Systemy: żółw rysuje rośliny

Wybierz język interfejsu programu:

Systemy Lindemayer’a, lub krócej – L-systemy, znajdują coraz większe zastosowanie w grafice komputerowej, szczególnie w generowaniu fraktali i modelowaniu roślin. L-system przydają się także w tworzeniu artystycznych form kultury Wschodnich Indii, czy algorytmów do komponowania muzyki na podstawie form graficznych.

L-systemy wykorzystują tzw. produkcje – reguły reprezentowane w postaci łańcuchów o określonych znakach. Produkcje definiują struktury graficzne.

Rozpatrzmy łańcuch złożony z dwóch liter a i b, które mogą pojawiać się w łańcuchu wiele razy). Dla każdej litery określmy regułę przepisywania. Reguła a: ab oznacza, że litera a ma być zastąpiona sekwencją ab. Reguła b: a oznacz, że litera b ma zostać zastąpiona literą a. Proces przetwarzania reguł rozpoczyna się od wyróżnionego łańcucha zwanego aksjomatem. Niech aksjomatem w naszym przykładzie będzie pojedyńcza litrera b. W pierwszym kroku aksjomat b jest zastępowany przez literę a produkcją b: a. W kroku następnym a jest zastępowana przez łańcuch ab zgodnie z produkcją a: ab. Słowo ab składa się z dwóch liter. Obie litery są jednocześnie zastępowane w kolejnym kroku przetwarzania: a jest zastępowane ciągiem ab, zaś b pojedynczą literą a – tak powstaje łańcuch aba. W podobny sposób (jednoczesnej wymiany wszystkich liter w otrzymywanym ciągu) z łańucha aba powstaje łańcuch abaab, który generuje łańcuch abaababa. Z ten ostatniego możemy wywieść ciąg abaababaabaab itd.

Rys. 1.

Wiele fraktali to zwykła sekwencja prostych elementów – odcinków na płaszczyźnie. Długość takich odcinków i kąty jakie ze sobą tworzą mają znaczenie. Żeby generować fraktale, łańcuchy reprezentowane przez L-systemy, muszą zawierać niezbędne informacje dot. grafiki. Język LOGO i grafika żółwiowa pomagają w prosty sposób definiować struktury graficzne. W tym celu musimy określić przyrost kąta, o jaki będzie obracał się żółw. Rozmiar kroku określa długość pojedynczego odcinka. Żeby można było rysować dowolne struktury, żółw pownien reagować na następujące symbole:

F zrób krok w przód o długości d

f zrób krok w przód o długości d nic nie rysując

+ obróć się o określony kąt w prawo

- obróć się określony kąt w lewo

[ wrzuć bieżący stan na stos. Zapamiętaj pozycję żółwia, kolor, grubość rysowanej lini itp.

] bieżącym stanem staje się stan pobrany ze szczytu stosu. Żółw nie rysuje porzy tym żadnych lini, choć w jego pozycja może zmienić się.

Każdy inny symbol jest ignorowany przez żółwia.

Poniższy L-system generuje tzw. Kwadratową wyspę Koch’a.

F+F+F+F

F: F+F-F-FF+F+F-F

W pierwszym kroku powyższy L-system wygeneruje kwadrat. Im więcej kroków wykonanych przez żółwia, tym bardziej złożona jest generowana struktura.

Przy użyciu symboli operowania na stosie:[ oraz ] możemy konstryować struktury podobne do rzeczywistych roślin. Poszczególne produkcje takich L-systemów mają za zadanie tworzyć korzeń, gałęzie i liście.

Prowadzący: Maciej Komosiński
Program: Aleksander Kędzierski