• Nie Znaleziono Wyników

Algorytmy stochastyczne — laboratorium 04 Jarosław Piersa

N/A
N/A
Protected

Academic year: 2021

Share "Algorytmy stochastyczne — laboratorium 04 Jarosław Piersa"

Copied!
3
0
0

Pełen tekst

(1)

Algorytmy stochastyczne — laboratorium 04

Jarosław Piersa

2014-03-14

1 Projekty

1.1 Systemy Liendenmayera na płaszczyźnie (1p)

Napisz interpreter systemów Liendenmayera ze stosem wraz z możliwością wyświetlania. Pomysły na rozszerzenia:

• systemy w 3d zamiast 2d (żółw ze skrzydłami)

• systmey kontekstowe

• systemy stochastyczne

1.2 Renderowanie terenu (1p)

Napisz silnik generujący mapę wysokości terenu i wyświetlający teren w R3.

1.3 Renderowanie lasu (2p)

Połączenie powyższych. Napisz silnik generujący teren pokryty roślinnością (lasy lub łąki).

2 Prosta implementacja LS w Octave

Grafika żółwia, przetwarzanie poleceń: process.m

% t u r t l e g r a p h i c s i n t e r p r e t e r

% a r g u m e n t s :

% 1. o r d e r to be e x e c u t e d

% 2. T u r t l e p o s i t i o n s t a c k

% 3. S t e p l e n g t h

% 4 d e f a u l t t u r n a n g l e

% r e t u r n s new t u r t l e p o s i t i o n s t a c k

f u n c t i o n p o s 1 = p r o c e s s ( char , pos , step , a l p h a )

% f o r w a r d and d r a w a l i n e

if ( c h a r == ’ F ’ || c h a r == ’ R ’ || c h a r == ’ L ’) xn = pos (1) + s t e p * cos( pos ( 3 ) ) ; yn = pos (2) + s t e p * sin( pos ( 3 ) ) ;

p l o t([ pos (1) , xn ] ,[ pos (2) , yn ] , ’ c o l o r ’, ’ g ’);

h o l d on ;

p o s 1 = [ xn , yn , pos (3) , pos (4:end)];

% f o r w a r d but don ’ t d r a w l i n e e l s e i f ( c h a r == ’ f ’)

xn = pos (1) + s t e p * cos( pos ( 3 ) ) ; yn = pos (2) + s t e p * sin( pos ( 3 ) ) ; p o s 1 = [ xn , yn , pos (3) , pos (4:end)];

% t u r n r i g h t

e l s e i f ( c h a r == ’ + ’)

p o s 1 = [ pos (1) , pos (2) , pos (3) + alpha , pos (4:end)];

% t u r n l e f t

e l s e i f ( c h a r == ’ - ’)

p o s 1 = [ pos (1) , pos (2) , pos (3) - alpha , pos (4:end)];

% s a v e p o s i t i o n / p u s h it on the s t a c k e l s e i f ( c h a r == ’ [ ’)

p o s 1 = [ pos (1:3) , pos ];

% r e s t o r e p o s i t i o n / pop f r o m the s t a c k

1

(2)

e l s e i f ( c h a r == ’ ] ’)

if l e n g t h( pos ) >=6

% in c a s e t h e r is o n l y one p o s i t i o n

p o s 1 = pos (4:end);

end e l s e

p o s 1 = pos ;

% i g n o r e o t h e r c o m m a n d s end

end

Grafika żółwia, wyświetlanie całego napisu: renderString.m

%

% L - s y s t e m r e n d e r i n g

f u n c t i o n r e n d e r S t r i n g ( str , step , a l p h a ) f i g u r e( 1 ) ;

h o l d off ;

% x , y , a l p h a pos = [0 ,0 ,pi/ 2 ] ; for i =1:l e n g t h( str )

pos = p r o c e s s ( str ( i ) , pos , step , a l p h a );

end

% e q u a l f o r c e s the a s p e c t r a t i o x / y = 1

a x i s([1 ,2] , ’ a u t o x ’, ’ a u t o y ’,’ s q u a r e ’, ’ e q u a l ’);

end

Generowanie napisu na podstawie aksjomatu: genString.m

% i t e r a t i v e l y r e w r i t e s the a x i o m a c c o r d i n g to the r u l e s

%

f u n c t i o n s = g e n S t r i n g ( axiom , rules , i t e r s ) s = a x i o m ;

for ( i =1: i t e r s ) t e m p s = ’ ’;

for j = 1:l e n g t h( s )

q = f i n d R u l e ( s ( j ) , r u l e s );

t e m p s = s t r c a t ( temps , q );

end

s = t e m p s ; end

end

Funkcja pomocnicza — wyszukiwanie właściwej reguły zastępowania: findRule.m f u n c t i o n ret = f i n d R u l e ( char , r u l e s )

ret = c h a r ;

% T a s k : r e w r i t e the r u l e s so it can use b i n a r y s e a r c h

%

for i =1: l e n g t h( r u l e s ( ) ) ;

if ( r u l e s { i } ( 1 ) == c h a r )

ret = r u l e s { i } ( 3 :end);

end end

end

Główna funkcja: LS.m f u n c t i o n LS ()

a x i o m = ’ F ’;

i t e r s = 5;

2

(3)

s t e p = 1;

r u l e s = {

’ F = FF -[ - F + F + F ] + [ + F - F - F ] ’ };

a l p h a = pi * 2 2 . 5 / 1 8 0 ;

s t r i n g = g e n S t r i n g ( axiom , rules , i t e r s );

s t r i n g

r e n d e r S t r i n g ( string , step , a l p h a ) end

Ćwiczenia

• dopisz stochastyczną wersję przepisywania:

– dopuszczane są dwie (lub więcej) reguły zastępowania tego samego znaku:

X => ABC X => BC

– system wybiera losową z nich.

– jeżeli jest tylko jedna reguła, to zawsze ją wybieramy. Jeżeli nie ma żadnych to przepisujemy trywialnie:

Q => Q

• dopisz sterowanie żółwiem w R3(latający żółw)

– położenie żółwia jest określane przez trójkę liczb (x, y, z),

– orientacja jest określana przez parę liczb α, β (obrót i nachylenie, współrzędne sferyczne) lub trójkę RPY (ang.

roll pitch yaw, obroty „lotnicze”), – obroty:

∗ azymut i nachylenie (sferyczne)

∗ wokół osi OX, OY i OZ (roll pich yaw)

• różne interpretacje i renderowanie: np. F — łodyga podlegająca wzrostowi, X pąk w którym tworzy się kwiat (nie podlega zastępowaniu)

3

Cytaty

Powiązane dokumenty

zaloguj się na maszynę zdalną, uruchom jakiś dziwny program zaloguj się drugi raz, zlokalizuj proces drugiej sesji i go

[r]

Jedna osoba edytuje plik tekstowy w środowisku Lixuxowym druga — Windowsowym.. Czy nadal można

• rozszerz polecenie, aby usuwało również komentarze wieloliniowe – wskazówka: złam linię przed rozpoczęciem każdego komentarza – złam linię po zamknięciu komentarza. –

• jeżeli locale jest ustawione na PL pl to domyślnym separatorem dziesiętnym będzie przecinek — niezrozumiały dla awka, taki plik należy uprzednio przetworzyć (np sedem

Skrypt może zadawać pytania „Czy Twoja liczba to X?”, „Czy Twoja liczba jest większa od X?”, „Czy Twoja liczba jest mniejsza od

Napisz skrypt w perlu, który będzie prostym (by nie rzec: prymitywnym) tłumaczem tekstu z języka polskiego na angielski (lub w drugą stronę, wybór języka jest dowolny, ale

polecenie, które wyśle do procesu o identyfikatorze 1234 sygnał SIGTERM (można przyjąć założenie, że proces o takim.