Algorytmy stochastyczne — laboratorium 07
Jarosław Piersa
2014-04-04
1 Krajobraz fraktalny
1.1 Ćwiczenia do przemyślenia na zajęciach
Z moodle pobierz archiwum ze źródłami
• popraw bug, który powoduje, że wartości na wspólnych krawędziach są liczone podwójnie (w funkcji recFill())
• dodaj inicjowanie mapy wartościami w wybranych punktach (w matlabie indeksowania są od 1 zatem będą to pozycje 2k+ 1, może też wymagać modyfikacji funkcji recFill())
• poszukaj dokumentacji do funkcji surfl() (a surf() + lighting), zmień wyśiwetlanie powierzchni na powierzchnię oświetloną (plasma())
• dopisz rozmycie liniowe / gaussowskie do mapy wysokości
• poszukaj dokumentacji do mapy kolorów powierzchni (colormap()); w pętli T = 1:100 cyklicznie przesuwaj mapę kolorów o jeden element aby uzyskać efekt plazmy
f u n c t i o n z = sdf ( n ) w = 2^ n +1;
z = z e r o s( w , w );
z (1 ,1) = r a n d n(); z (1 , w ) = r a n d n(); z ( w ,1) = r a n d n(); z ( w , w ) = r a n d n();
z = r e c F i l l 1 ( z , 1 , w , 1 , w );
f i g u r e( 1 ) ; h o l d off ;
s u r f(1: w , 1: w , z );
% m e s h (1: w , 1: w , z );
c o l o r m a p(b o n e);
end
f u n c t i o n Z1 = r e c F i l l ( Z , fromX , toX , fromY , toY ) if ( toX - f r o m X == 1)
Z1 = Z ; r e t u r n end
s c a l = 0 . 0 2 5 ;
% s q u a r e s t e p
m i d X = ( f r o m X + toX ) / 2;
m i d Y = ( f r o m Y + toY ) / 2;
s = Z ( fromX , f r o m Y ) + Z ( toX , f r o m Y ) + Z ( fromX , toY ) + Z ( toX , toY );
Z ( midX , m i d Y ) = .25 * s + r a n d n() * ( toX - f r o m X ) * s c a l ;
% d i a m o d s t e p
Z ( fromX , m i d Y ) = .5 * ( Z ( fromX , f r o m Y ) + Z ( fromX , toY )) + r a n d n() * .5 *( toX - f r o m X ) * s c a l ;
Z ( toX , m i d Y ) = .5 * ( Z ( toX , f r o m Y ) + Z ( toX , toY )) + r a n d n() * .5 * ( toX - f r o m X ) * s c a l ;
Z ( midX , f r o m Y ) = .5 * ( Z ( fromX , f r o m Y ) + Z ( toX , f r o m Y )) + r a n d n() * .5 *( toX - f r o m X ) * s c a l ;
1
Z ( midX , toY ) = .5 * ( Z ( fromX , toY ) + Z ( toX , toY )) + r a n d n() * .5 * ( toX - f r o m X ) * s c a l ;
Z = r e c F i l l ( Z , fromX , midX , fromY , m i d Y );
Z = r e c F i l l ( Z , midX , toX , fromY , m i d Y );
Z = r e c F i l l ( Z , fromX , midX , midY , toY );
Z = r e c F i l l ( Z , midX , toX , midY , toY );
Z1 = Z ; end
f u n c t i o n p l a s m a 1 ()
% in c a s e of p r o b l e m s d e c r e a s e n n = 7;
x = 1 : ( 2 ^ n + 1 ) ; z = sdf ( n );
% m e s h ( x , x , z );
s u r f( x , x , z ,’ E d g e C o l o r ’,’ n o n e ’,’ L i n e S t y l e ’,’ n o n e ’,
’ F a c e C o l o r ’,’ i n t e r p ’, ’ F a c e L i g h t i n g ’,’ p h o n g ’);
v i e w(0 , 9 0 ) ; % azimuth , e l e v a t i o n
% p r e d e f i n e d c o l o r m a p s :
% map = w i n t e r ( 3 0 ) ;
% map = b o n e ( 3 0 ) ;
% map = a u t u m n ( 3 0 ) ;
% map = s u m m e r ( 3 0 ) ;
% map = s p r i n g ( 3 0 ) ;
map = o c e a n ( 3 0 ) ; % my f a v o u r i t e :)
% map = hot ( 3 0 ) ;
% map = c o p p e r ( 3 0 ) ;
% map = jet ( 3 0 ) ;
% map = hsv ( 3 0 ) ; % C A R E F U L !! t h i s one can c a u s e e p i l e p s y !!
% map = c o o l ( 3 0 ) ;
% map = p i n k ( 3 0 ) ;
% map = o c e a n ( 1 0 0 ) ( 7 0 : 1 0 0 , : ) ; c o l o r m a p( map );
g r i d(" off ");
a x i s(" off ");
f l a g P r i n t = f a l s e ; if f l a g P r i n t
t =s p r i n t f(’ ./ f i g _ %04 d . png ’, 0);
p r i n t( t , ’ - d p n g ’);
u s l e e p ( 1 0 0 0 ) ; end
end
2