Algorytmy stochastyczne, wykład 07 Parametryczne systemy
Jarosław Piersa
Wydział Matematyki i Informatyki, Uniwersytet Mikołaja Kopernika
2014-04-03
Parametryczne LS
polecenia mogą przyjmować argumenty np:
F (10) — naprzód o 10 kroków
f (x ) — naprzód o x kroków bez rysowania linii
−(45) — obrót w prawo o 45 stopni
Przykłady
A(x , y ) → B(y ∗ p)A(x − 1, y )A(x , y − 1)
uwaga: symbole +, -, / stają się przeciążone i mogą oznaczać
obrót lub działanie zależnie od konktekstu w implementacji
bezpieczniej będzie zmienić oznaczenia obrotów
Przykłady
System z warunkami
A(x ) : x => 3 → B(1)A(x − 1)A(x − 1) A(x ) : x < 3 → C
Produkcje mogą być zależne od argumentu(ów)
Po co?
rozszerzenie funkcjonalności
modelowanie zmieniającej się wielkości
elementy programowania w opisie systemów
Dodatkowe instrukcje
! — zmiana grubości kreski (zwykle zmniejszenie), uwaga grubość powinna być zapisywana i odczytywana ze stosu podczas operacji ’[’ oraz ’]’
$ — zorientuj żółwia pionowo „do góry”
’ — zmiana koloru na następny w palecie (kora, liść, kwiaty)
Modelowanie drzew
Przepis na drzwo:
łodyga
rozgałęzienie (dwie odnogi z jednej łodygi) zmniejszenie grubości łodygi
zmniejszenie długości łodygi (jednej lub obu)
L-System — Drzewo 1
Przykład
Drzewo z jednym stożkiem wzrostu aksjomat s : A(1, 10)
Produkcje:
A(l , w ) : ∗ →!(w )F (l )[&(a 0 )B(l ∗ r 2 , w ∗ w r )]/(d )A(l ∗ r 1 , w ∗ w r )
B(l , w ) : ∗ →!(w )F (l )[−(a 2 )$C (l ∗ r 2 , w ∗ w r )]C (l ∗ r 1 , w ∗ w r )
C (l , w ) : ∗ →!(w )F (l )[+(a 2 )$B(l ∗ r 2 , w ∗ w r )]B(l ∗ r 1 , w ∗ w r )
r 1 , r 2 , w r , a 0 , a 2 , d — stałe
L-System — Drzewo 1
Przykład
Do parametrów można dodać mały szum
Parametryczny LS można uzyć do iterowania offsetu:
A(L, W ) : l > 5 → F (y )A(L − 1, W )
A(L, W ) : l <= 4 → F (x )[+A(L−1, W ∗0.8)][−A(L−1, W ∗0.9)]
można wydłużyć łodygę przed pierwszymi rozgałęzieniami
Inny pomysł: można zablokować liczbę rekurencyjnych
rozgałęzień
Przykład
Drzewo z rozwijające się w dwóch gałęziach aksjomat s : A(1, 10)
Produkcje:
A(l , w ) : ∗ →
!(w )F (l )[&(a 1 )B(l ∗ r 1 , w ∗ w r )]/(180)[&(a 2 )B(l ∗ r 2 , w ∗ w r )]
B(l , w ) : ∗ →
!(w )F (l )[+(a 1 )$B(l ∗ r 1 , w ∗ w r )][−(a 2 )$B(l ∗ r 2 , w ∗ w r )]
r 1 , r 2 , w r , a 0 , a 2 — stałe
L-System — Drzewo 2
Przykład
Drzewo z trzeba odnogami z łodygi aksjomat s : !(1)F (200)/(45)A Produkcje:
A : ∗ →
!(v r )F (50)[&(a)F (50)A]/(d 1 )[&(a)F (50)A]/(d 2 )[&(a)F (50)A]
F (l ) : ∗ → F (l ∗ l r )
!(w ) : ∗ →!(w ∗ v r )
l r , v r , a, d 1 , d 2 — stałe
L-System — Drzewo 3
Zig-zag
Łodyga w kształcie zygzaka
Zig-zag
Łodyga w kształcie zygzaka
A(α, l ) → F (l )[F (l ∗ 0.5)P(l )] + (α)A(−α, l ∗ 0.9)
Spiralne
Łodyga w kształcie spirali
Spirala
Łodyga w kształcie spirali
A(α, l ) → F (l )[F (l ∗ 0.5)P(l )][+(π/2)L(l )] + (α)A(α, l ∗ 0.9)
Podwójne
Łodyga w kształcie rozgałęziona
Podwójna
Rozgałęzienie A(α, l ) →
F (l )[F (l ∗ 0.5)P(l )][+(π/2)L(l )][−(π/2)L(l )][+(α)F (l ∗
0.9)A(α, l ∗ 0.9)][−(α)F (l ∗ 0.9)A(α, l ∗ 0.9)]
Zigzag
Wykorzystanie: zigzag
Łodyga
Zygzag
A(α, l , d ) : d = 0 → F (l )
A(α, l , d ) : d >= 1 → F (l )[+(α)Zigzag (d )]A(−α, l ∗ 0.9, d − 1)
Spiralna
Roślina: spiralna
Zigzag
Kwiaty rozgałęzione
Razem
Drzewo wraz z pędami
Ciekawostka: neuron w PovRay
Źródła
P. Prosiunkiewicz, A. Liendenmayer, The algorithmic beaty of
plants
Algorytm
Dane:
wysokość i szerokość obszaru wielkości 2 n , dla n ∈ N
zadana wartość na rogach obszaru (0, 0), (2 n , 0), (0, 2 n ), (2 n , 2 n ) Wynik:
mapa wysokości dla każdego punktu
Algorytm
dane: s x , k x , s y , k y — startowe i końcowe indeksy dla x i y jeżeli s x + 1 = k x , to zakończ (równoważnie zachodzi:
s y + 1 = k y )
przypisz środkowy x m x := s
x+k 2
xprzypisz środkowy y m y := s
y+k 2
yustal wartość dla środkowego punktu
T [m x , m y ] := T [s
x,s
y]+T [k
x,s
y]+T [s 4
x,k
y]+T [k
x,k
y] + N(0, σ 2 )
ustal wartość dla środków na brzegach (kont.)
Algorytm
ustal wartość dla środków na brzegach T [s x , m y ] := T [s
x,s
y]+T [s 2
x,k
y] + N(0, σ 2 ) T [k x , m y ] := T [k
x,s
y]+T [k 2
x,k
y] + N(0, σ 2 ) T [m x , s y ] := T [s
x,s
y]+T [k 2
x,s
y] + N(0, σ 2 ) T [m x , k y ] := T [s
x,k
y]+T [k 2
x,k
y] + N(0, σ 2 )
wywołaj rekurencyjnie algorytm dla powstałych czterech
mniejszych podobszarów
Przykłady
0 10 20 30
40 50 60 700
10 20
30 40
50 60
70
-5 0 5 10 15 20
0 10 20 30 40 50 60 70
0 10 20 30 40 50 60 -470 -2 0 2 4 6 8 10