;program: Baobab ;autor: Adam Baranowski ;Oto program rysujący drzewo, które moim zdaniem najbardziej przypomina baobab. ;Zastosowałem w nim algorytm generuący ciąg liczb pseudolosowych. Dzięki nim ;poszczególne partie gałęzi różnią się wzgledem siebie wysokością i kątem "wyrośnięcia" z pnia. ;Sam pień także ma zdeformowaną postać tak jak w prawdziwym drzewie. ;Nadaje to memu baobabowi większy realizm. ;Program ma dwa parametry: ; ilość konarów (zaokrąglany do liczby parzystej) - do podania liczby gałęzi odrastających od pnia, ; ziarno losowości -(dowolna liczba z przedziału 1...30 ) - potrzebne do inicjacji losowego generowania rozłożenia i wielkości poszczególnych konarów. ;Procedura "liść" rysuje pojedynczy liść. ;Użyłem tekstury łusek gdyż dobrze odzwierciedla strukturę żyłek w liściu. oto liść wielokąt materiał łuski lw 45 np 20 pw 45 np 30 pw 45 np 20 pw 90 np 20 pw 45 np 30 pw 45 np 20 pw 135 gotowy już ;Procedura "kwadrat" jest procedurą pomocniczą potrzebną do optymalnego utworzenia procedury "segment" oto kwadrat :ile :grubość wielokąt materiał drewno1 powtórz 2 [np :ile pw 90 np :grubość pw 90] gotowy już ;Procedura "segment" rysuje człon gałęzi bez liści. oto segment :ile :grubość kwadrat :ile :grubość dół 90 kwadrat :grubość :grubość np :grubość góra 90 kwadrat :ile :grubość dół 90 pw 90 góra 90 kwadrat :ile :grubość dół 90 np :grubość góra 90 kwadrat :ile :grubość np :ile góra 90 kwadrat :grubość :grubość np :grubość góra 90 np :ile góra 90 lw 90 lw 180 np :grubość lw 180 góra 90 pod np :ile opu już ;Procedura "drzewko" jest procedurą rekurencyjną rysującą drzewko składające się z pnia rozchodzących się konarów zakończonych pękami liści. oto drzewko :x :bok jeżeli :x < 0 [ liść góra 50 liść dół 100 liść góra 50 stop ] segment :bok :bok / 10 lw 45 drzewko :x - 1 :bok / 2 pw 90 drzewko :x - 1 :bok / 2 lw 45 lw 180 np :bok lw 180 już ;Procedura "modulo" zastępuje funkcję(niedostępną w Simbie) podającą resztę z dzielenia. Potrzebna do generowania liczb losowych. oto modulo :dzielna :dzielnik przyp "pom :dzielnik powtórz :dzielna [ jeżeli :dzielna < (:pom + :dzielnik) [ wynik :dzielna - :pom ] jeżeli :dzielna < (:pom + :dzielnik) [ stop ] przyp "pom :pom + :dzielnik ] już ;Procedura "Baobab"jest rdzeniem programu. Wywołuje procedurę "drzewko" o losowej wyokości. ;Obraca je względem siebie o losowy kąt. Dzięki parametrowi :konarów można zadać ilość konarów. Od tego parametru załeży gęstość baobabu. ;Najlepszy efekt wychodzi przy :konarów = 12 lub :konarów = 14. Osoba wywołująca program powinna podać ziarno losowości ;dzięki czemu baobab będzie losowy. Procedura posiada sprawdzenie parametrów wejściowych. oto Baobab :konarów :ziarno jeżeli :konarów < 2 [ pisz 'Wartość drugiego parametru może być z przedziału 2..16' stop ] jeżeli :konarów > 16 [ pisz 'Wartość drugiego parametru może być z przedziału 2..16' stop ] jeżeli :ziarno < 1 [ pisz 'Wartość drugiego parametru może być z przedziału 1..30' stop ] jeżeli :ziarno > 30 [ pisz 'Wartość drugiego parametru może być z przedziału 1..30' stop ] cs przyp "kąt 360 / :konarów - 6 przyp "klos 0 przyp "wys 540 przyp "wlos 0 przyp "zl :ziarno powtórz :konarów / 2 [ przyp "s 13 * :zl + 7 przyp "d 12 przyp "klos {modulo :s :d} przyp "wlos :klos * 10 przyp "zl :klos drzewko 5 :wys + :wlos dół 90 pw :kąt + :klos góra 90 ] już Baobab 12 11 ;Spróbuj także Baobab 10 5, Baobab 8 4, Baobab 14 9