8caea99f42ab9c2676f28e17c07a9d6ed1eae0ce
[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 = -2;                 // white
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 30 ], ..
69     "background"          , [0.9 0.9 0.9], ..
70     "Relief"              , "groove", ..
71     "callback"            , "quit_riemann", ..
72     "tag"                 , "pushbutton_bac" ..
73     );
74
75     my_pause_button = uicontrol( ..
76     "parent"              , my_handle, ..
77     "style"               , "pushbutton", ..
78     "string"              , "PAUSE", ..
79     "units"               , "pixels", ..
80     "position"            , [ 150 15 100 30 ], ..
81     "background"          , [0.9 0.9 0.9], ..
82     "Relief"              , "groove", ..
83     "callback"            , "pause_riemann", ..
84     "tag"                 , "my_pause_button" ..
85     );
86
87     my_play_button = uicontrol( ..
88     "parent"              , my_handle, ..
89     "style"               , "pushbutton", ..
90     "string"              , "PLAY", ..
91     "units"               , "pixels", ..
92     "position"            , [ 150 15 100 30 ], ..
93     "background"          , [0.9 0.9 0.9], ..
94     "callback"            , "play_riemann", ..
95     "Relief"              , "groove", ..
96     "visible"             , "off", ..
97     "tag"                 , "my_play_button" ..
98     );
99
100     realtimeinit(0.01);
101
102     my_rotation_dir = [0 1];
103     my_counter      = 0;
104
105     for k = 1:10000
106
107         if quit_var == 1 then
108             if isHandleExistAndValid("my_handle") then
109                 delete(my_handle);
110             end
111             return;
112         end
113
114         if pause_var == 1 & ~isHandleExistAndValid("my_handle") then
115             return;
116         end
117
118         realtime(k);
119
120         if isHandleExistAndValid("my_pause_button") & ..
121             isHandleExistAndValid("my_pause_button") & ..
122             isHandleExistAndValid("my_quit_button") & ..
123             isHandleExistAndValid("my_handle") then
124
125             if pause_var == 1 then
126                 my_play_button.visible = "on";
127                 my_pause_button.visible = "off";
128             end
129
130             if pause_var == 0 then
131                 if my_pause_button.visible == "off" then
132                     my_play_button.visible   = "off";
133                     my_pause_button.visible  = "on";
134                 end
135
136                 my_axe.rotation_angles = my_axe.rotation_angles + my_rotation_dir;
137                 my_counter = my_counter + 1;
138             end
139
140             if modulo(my_counter,720) == 0 then
141                 my_rotation_dir = [0 1];
142             elseif modulo(my_counter,360) == 0 then
143                 my_rotation_dir = [1 0];
144             end
145         else
146             quit_var = 1;
147         end
148     end
149
150 endfunction
151
152
153 function cplxmap(z, w, varargin)
154
155     //cplxmap(z,w,T,A,leg,flags,ebox)
156     //cplxmap Plot a function of a complex variable.
157     //       cplxmap(z,f(z))
158
159     x            = real(z);
160     y            = imag(z);
161     u            = real(w);
162     v            = imag(w);
163
164     my_handle    = gcf();
165     my_color_map = my_handle.color_map;
166     ncols        = size(my_color_map, "r");
167
168     [X, Y, U]    = nf3d(x, y, u);
169     [X, Y, V]    = nf3d(x, y, v);
170     Colors       = sum(V, "r");
171     Colors       = Colors - min(Colors);
172     Colors       = int((ncols-1) * Colors / max(Colors) + 1);
173
174     plot3d(X, Y, list(U, Colors), varargin(:));
175
176 endfunction
177
178 function [z, s] = cplxroot(n, m)
179
180     //cplxroot(n,m,T,A,leg,flags,ebox)
181     //CPLXROOT Riemann surface for the n-th root.
182     //       CPLXROOT(n) renders the Riemann surface for the n-th root.
183     //       CPLXROOT, by itself, renders the Riemann surface for the cube root.
184     //       CPLXROOT(n,m) uses an m-by-m grid.  Default m = 20.
185     // Use polar coordinates, (r,theta).
186     // Cover the unit disc n times.
187     // Copyright INRIA
188
189     [lhs, rhs] = argn(0);
190
191     if rhs  < 1, n = 3; end
192     if rhs  < 2, m = 20; end
193
194     r = (0:m)'/m;
195     theta = - %pi*(-n*m:n*m)/m;
196     z = r * exp(%i*theta);
197     s = r.^(1/n) * exp(%i * theta/n);
198
199 endfunction
200
201 function quit_riemann
202     global quit_var;
203     quit_var = 1;
204 endfunction
205
206 function pause_riemann
207     global pause_var;
208     pause_var = 1;
209 endfunction
210
211 function play_riemann
212     global pause_var;
213     pause_var = 0;
214 endfunction
215
216 function bOK = isHandleExistAndValid(handleName)
217     bOK = is_handle_valid(evstr(handleName)) & (type(evstr(handleName)) == 9) & exists(handleName);
218 endfunction
219
220 funcprot(1);