75028bb0794452d42f74374f48ca8ea3054c7d49
[scilab.git] / scilab / modules / graphics / demos / anim / anim8 / anim8.sci
1 //
2 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 // Copyright (C) INRIA
4 // Copyright (C) DIGITEO - 2010 - Allan CORNET
5 //
6 // This file is distributed under the same license as the Scilab package.
7 //
8
9 funcprot(0);
10
11 function demo_riemann()
12
13   global quit_var;
14   global pause_var;
15
16   quit_var  = 0;
17   pause_var = 0;
18
19   // Figure creation
20   // =========================================================================
21   my_handle = scf(100001);
22   clf(my_handle, "reset");
23
24   // Add "see code" menu item
25   // =========================================================================
26   demo_viewCode(SCI+"/modules/graphics/demos/anim/anim8/anim8.sci");
27
28   // Drawlater
29   // =========================================================================
30   my_handle.immediate_drawing = "off";
31
32   // Colormap
33   // =========================================================================
34   my_handle.color_map = rainbowcolormap(128);
35
36   // Compute
37   // =========================================================================
38   [z,s]               = cplxroot(4,35);
39
40   // Draw
41   // =========================================================================
42   cplxmap(z,s,163,69);  //draw
43
44   // Adjust some graphical parameters
45   // =========================================================================
46   my_axe               = gca();
47   my_fac3d             = gce();
48
49   my_handle.axes_size  = [ 600 650 ];
50
51   my_handle.background = -1;                 // black
52   my_axe.background    = -1;                 // gray
53   my_axe.foreground    = 14;                 // white
54   my_fac3d.color_mode  =  1;                 // no lines
55
56   // Drawnow
57   // =========================================================================
58   my_handle.immediate_drawing = "on";
59
60   // Stop => Pushbutton
61   // =========================================================================
62
63   my_quit_button = uicontrol( ..
64     "parent"              , my_handle, ..
65     "style"               , "pushbutton", ..
66     "string"              , "QUIT", ..
67     "units"               , "pixels", ..
68     "position"            , [ 350 15 100 40 ], ..
69     "background"          , [1 1 1], ..
70     "callback"            , "quit_riemann", ..
71     "tag"                 , "pushbutton_bac" ..
72   );
73
74   my_pause_button = uicontrol( ..
75     "parent"              , my_handle, ..
76     "style"               , "pushbutton", ..
77     "string"              , "PAUSE", ..
78     "units"               , "pixels", ..
79     "position"            , [ 150 15 100 40 ], ..
80     "background"          , [1 1 1], ..
81     "callback"            , "pause_riemann", ..
82     "tag"                 , "my_pause_button" ..
83   );
84
85   my_play_button = uicontrol( ..
86     "parent"              , my_handle, ..
87     "style"               , "pushbutton", ..
88     "string"              , "PLAY", ..
89     "units"               , "pixels", ..
90     "position"            , [ 150 15 100 40 ], ..
91     "background"          , [1 1 1], ..
92     "callback"            , "play_riemann", ..
93     "visible"             , "off", ..
94     "tag"                 , "my_play_button" ..
95   );
96
97   realtimeinit(0.01);
98
99   my_rotation_dir = [0 1];
100   my_counter      = 0;
101
102   for k = 1:100000
103   
104     if quit_var == 1 then
105       if isHandleExistAndValid("my_handle") then
106         delete(my_handle);
107       end
108       return;
109     end
110     
111     if pause_var == 1 & ~isHandleExistAndValid("my_handle") then
112       return;
113     end
114     
115     realtime(k);
116
117     if isHandleExistAndValid("my_pause_button") & ..
118         isHandleExistAndValid("my_pause_button") & ..
119         isHandleExistAndValid("my_quit_button") & ..
120         isHandleExistAndValid("my_handle") then
121
122       if pause_var == 1 then
123         my_play_button.visible = "on";
124         my_pause_button.visible = "off";
125       end
126
127       if pause_var == 0 then
128         if my_pause_button.visible == "off" then
129           my_play_button.visible   = "off";
130           my_pause_button.visible  = "on";
131         end
132
133         my_axe.rotation_angles = my_axe.rotation_angles + my_rotation_dir;
134         my_counter = my_counter + 1;
135       end
136
137       if modulo(my_counter,720) == 0 then
138         my_rotation_dir = [0 1];
139       elseif modulo(my_counter,360) == 0 then
140         my_rotation_dir = [1 0];
141       end
142     else
143       quit_var = 1;    
144     end
145   end
146   
147   
148 endfunction
149
150
151 function cplxmap(z, w, varargin)
152
153   //cplxmap(z,w,T,A,leg,flags,ebox)
154   //cplxmap Plot a function of a complex variable.
155   //       cplxmap(z,f(z))
156
157   x            = real(z);
158   y            = imag(z);
159   u            = real(w);
160   v            = imag(w);
161
162   my_handle    = gcf();
163   my_color_map = my_handle.color_map;
164   ncols        = size(my_color_map, 'r');
165
166   [X, Y, U]    = nf3d(x, y, u);
167   [X, Y, V]    = nf3d(x, y, v);
168   Colors       = sum(V, 'r');
169   Colors       = Colors - min(Colors);
170   Colors       = int((ncols-1) * Colors / max(Colors) + 1);
171
172   plot3d(X, Y, list(U, Colors), varargin(:));
173
174 endfunction
175
176 function [z, s] = cplxroot(n, m)
177
178   //cplxroot(n,m,T,A,leg,flags,ebox)
179   //CPLXROOT Riemann surface for the n-th root.
180   //       CPLXROOT(n) renders the Riemann surface for the n-th root.
181   //       CPLXROOT, by itself, renders the Riemann surface for the cube root.
182   //       CPLXROOT(n,m) uses an m-by-m grid.  Default m = 20.
183   // Use polar coordinates, (r,theta).
184   // Cover the unit disc n times.
185   // Copyright INRIA
186
187   [lhs, rhs] = argn(0);
188
189   if rhs  < 1, n = 3; end
190   if rhs  < 2, m = 20; end
191
192   r = (0:m)'/m;
193   theta = - %pi*(-n*m:n*m)/m;
194   z = r * exp(%i*theta);
195   s = r.^(1/n) * exp(%i * theta/n);
196
197 endfunction
198
199 function quit_riemann
200   global quit_var;
201   quit_var = 1;
202 endfunction
203
204 function pause_riemann
205   global pause_var;
206   pause_var = 1;
207 endfunction
208
209 function play_riemann
210   global pause_var;
211   pause_var = 0;
212 endfunction
213
214 function bOK = isHandleExistAndValid(handleName)
215   bOK = is_handle_valid(evstr(handleName)) & (type(evstr(handleName)) == 9) & exists(handleName);
216 endfunction
217
218 funcprot(1);