Documente Academic
Documente Profesional
Documente Cultură
Fabio Scotti
• Tecniche di visualizzazione
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 2
Qualche esempio
0.8
0.6
0.4
0.2
0
5
5
0
0
-5 -5
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 3
Matlab per
• Acquisire dati (da sensori, telecamere, file, …)
• Elaborare dati
• Visualizzare dati e risultati
• Scrivere e verificare modelli
(matematici, fisici, statici, dinamici)
• Risolvere equazioni
(integrazione numerica e simbolica)
• Molte volte Matlab aiuta a
pensare, verificare, simulare e …
CAPIRE !
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 4
Un esempio spaziale
Vedi filmato
SondaSpirit__Rendering.mpeg
(costruzione di un modello da dati reali)
Vedi filmato
SondaSpirit__Simulazione.avi
(applicazione del modello ottenuto
ad un sistema di rendering)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 5
Tipico modo di procedere
1. Esposizione delle prime idee sul sistema/modello da
creare/simulare/scrivere
(descrizione ad alto livello, schizzi su carta)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 6
Partire dal semplice …
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 7
... ed aggiungere pametri, variabili,
nuove o migliori equazioni
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 8
Migliorare la “percezione” del fenomeno
Direzioni di arrivo
della radiazione
nello spazio
Array
circolare
di sensori
A shape describing the response of a ring of point sensors to signals arriving from different directions in
space. The distance of the surface from the centre of the object is proportional to the response of the ring in
that direction (Andrew Knight)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 9
Migliorare la “percezione” dei fenomeni
Meglio la figura
o l’equazione?
Meglio averle e
capirle entrambe!
Modi naturali di vibrazione di una corda attaccata da una parte ad un altoparlante e dall’altra ad una
carrucola con un peso. La figura è una superficie creata allineando uno accanto all’altro i vari cammini di
integrazione trovati. Sotto si trova l’equazione usata nella integrazione (metodo “shooting”)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 10
Teniche di visualizzazione
y=sin(x.^2); 0.8
plot(x,y); 0.6
0.4
0.2
-0.2
-0.4
-0.6
-0.8
-1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 12
Primi esempi con dati 1D
Mostrare la funzione precedente e la sua derivata
visualizzandone l’ andamento nel dominio [0, 8].
0.8
0.6
plot(x,y,'b'); 0.2
plot(x(2:end),yd,'r'); 0
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 13
Primi esempi con dati 1D
Completare il grafico con opportune etichette
xlabel('x');
ylabel('y {dy}/{dx}');
title ('y=sin(x^2) e la sua derivata in [0 8]')
0.8
0.6
0.4
0.2
y dy/dx
-0.2
-0.4
-0.6
-0.8
-1
0 1 2 3 4 5 6 7 8
x
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 14
Primi esempi con dati 2D
Caricare la matrice 2D penny.mat e visualizzarla
(la superficie di un penny in funzione delle coordinate x e y)
load penny ;
% la matrice delle altezze e' P
surf(P)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 15
Primi esempi con dati 2D
Mostrare in 4 modi diversi la superficie del penny in 4 sottofigure
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 16
Primi esempi con dati 2D
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 17
Primi esempi con dati 2D
Calcolare la funzione bidimensionale peaks, disegnarla, trovare il massimo
e segnarlo sul grafico
[Z] = peaks;
% abbiamo tutti i valori di X, Y, Z gia' precalcolati
Zmax = max(max(Z))
[ymax, xmax] = find(Z == Zmax)
% trovo gli indici dove sta' il massimo
% nella matrice (NON I VALORI DELLE COORD!!!)
hold on;
plot3( xmax, ymax, Zmax, 'hg', 'Markersize', 15 );
hold off;
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 18
Primi esempi con dati 2D
Disegnare i vettori della normale sulla superficie della funzione
z = x .* exp(-x.^2 - y.^2)
[x,y] = meshgrid(-2:.2:2,-1:.15:1);
z = x .* exp(-x.^2 - y.^2); 10
[u,v,w] = surfnorm(x,y,z); 6
quiver3(x,y,z,u,v,w); 0
-2
hold on,
surf(x,y,z), -4
hold off -6
-8
4
2 4
3
2
0 1
0
-2 -1
-2
-3
-4 -4
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 19
Primi esempi con dati 2D
Data la pista da sci di equazione z = x .* exp(-x.^2 - y.^2) evidenziare con i
colori la pendenza
Una pista da sci. Il colore indica il modulo della pendenza
[x,y] = meshgrid([-2:.1:2]);
Z = x.*exp(-x.^2-y.^2);
0.09
mesh(x,y,Z,abs(gradient(Z)))
0.5 0.08
0.07
xlabel('x'); ylabel('y'); zlabel('z');
0.06
title('Una pista da sci. Il colore …. 0
z
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 20
Vedere funzioni simboliche
Inserire luce nelle scene
sin(sqrt(x 2+y 2))/sqrt(x 2+y 2)
es: 0.5
ezsurf('sin(sqrt(x^2+y^2))/sqrt(x^2+y^2)',[-6*pi,6*pi])
0
-0.5
view(0,75) 10
10
shading interp 0
0
lightangle(-45,30) -10 -10
set(gcf,'Renderer','zbuffer') y x
set(findobj(gca,'type','surface'),...
'FaceLighting','phong',...
'AmbientStrength',.3,'DiffuseStrength',.8,...
'SpecularStrength',.9,'SpecularExponent',25,...
'BackFaceLighting','unlit')
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 21
Primi esempi con dati 3D
Profilo di velocita'' in un getto di fluido in un contenitore infinito
% Generate the volume data with the command
[x,y,z,v] = flow;
% Determine the range of the volume by finding the minimum and maximum of the coordinate data.
xmin = min(x(:)); ymin = min(y(:)); zmin = min(z(:));
xmax = max(x(:)); ymax = max(y(:)); zmax = max(z(:));
hslice = surf(linspace(xmin,xmax,100), linspace(ymin,ymax,100), zeros(100));
rotate(hslice,[-1,0,0],-45)
xd = get(hslice,'XData'); yd = get(hslice,'YData'); zd = get(hslice,'ZData'); delete(hslice)
h = slice(x,y,z,v,xd,yd,zd); set(h,'FaceColor','interp', 'EdgeColor','none', 'DiffuseStrength',.8)
hold on
hx = slice(x,y,z,v,xmax,[],[]); set(hx,'FaceColor','interp','EdgeColor','none')
hy = slice(x,y,z,v,[],ymax,[]); set(hy,'FaceColor','interp','EdgeColor','none')
hz = slice(x,y,z,v,[],[],zmin); set(hz,'FaceColor','interp','EdgeColor','none')
daspect([1,1,1])
axis tight
box on
view(-38.5,16)
camzoom(1.4)
camproj perspective
lightangle(-45,45)
colormap (jet(24))
set(gcf,'Renderer','zbuffer');
title('Profilo di velocita'' in un getto di fluido in un contenitore infinito');
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 22
Primi esempi con dati 3D
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 23
Volumi e superfici da volumi
clear; close all; load mri; D = squeeze(D); image_num = 8;
subplot(1,2,1); %%%%%%%%%%%%%%%%%%%%%%%%%
phandles = contourslice(D,[],[],[1,12,19,27],8);
view(3); axis tight
set(phandles,'LineWidth',2)
axis square
subplot(1,2,2) %%%%%%%%%%%%%%%%%%%%%%%%
Ds = smooth3(D);
hiso = patch(isosurface(Ds,5),...
'FaceColor',[1,.75,.65],...
'EdgeColor','none');
hcap = patch(isocaps(D,5),...
'FaceColor','interp',...
'EdgeColor','none');
colormap(map)
view(45,30)
axis tight Tutto parte dalla matrice
daspect([1,1,.4]) tridimensionale D
lightangle(45,30);
di dati MRI [128x128x27]
set(gcf,'Renderer','zbuffer'); lighting phong
isonormals(Ds,hiso)
set(hcap,'AmbientStrength',.6)
set(hiso,'SpecularColorReflectance',0,'SpecularExponent',50)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 24
Volumi e superfici da volumi
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 25
Animazioni e creazione filmati
% animazione di una superficie tridimensionale
z=peaks ;
fig=figure;
set(fig,'DoubleBuffer','on');
mov = avifile('example.avi')
10
surf(z) 5
-10
60
surf(sin(2*pi*n/50).*z)
50
40
40
30
20 20
10
0 0
% abbellimenti grafici
shading interp; colormap jet; savtoner save; axis(lim) Vedi file example.avi
F = getframe(gca);
mov = addframe(mov,F);
end
mov = close(mov);
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 26
Un primo esempio
Decollo di un jet
Decollo di un jet
Vogliamo visualizzare la traiettoria del jet
essendo note tutte le equazioni
x(t)
Equazioni
y(t)
z(t)
t
roll(t)
pitch(t)
yaw(t)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 28
Decollo di un jet
Costanti
ax = 6 ; % accelerazione in avanti del jet [m/s2];
az = 5 ; % accelerazione verso l'alto del jet [m/s2];
X = [];
Y = [];
Z = [];
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 29
Decollo di un jet
for t = [0:0.05:10] % analizziamo 10 secondi con uno step di 0.05 secondi
x = vx0 * t + 0.5 * ax * t^2 ;
Vx = vx0 + ax * t ;
end
% approssiamo che il jet non ruoti lungo i suoi gli assi (!)
% al massimo tranne che per il pitch (impennata)
pitch = zeros(size(X)); % anche pitch = -1*X./max(X)*0.15*pi;
roll = zeros(size(X));
yaw = zeros(size(X));
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 30
Decollo di un jet
subplot(1,4,[1 3])
plot3(X,Y,Z, '.');
grid on; xlabel('x [m]');ylabel('y [m]'); zlabel('z [m]');
subplot(1,4,4)
trajectory2(0,0,0,0 , 0,0, 1,0,'tomcat') Visualizzazione
figure;
trajectory2( X,Y,Z, pitch, roll, yaw,1,5,'tomcat')
Trajectory2 :
funzione che visualizza un aereo vettoriale
lungo la traiettoria x,y,z,
con le rotazioni lungo gli assi pitch, roll, yaw ,
in scala 1 e con passo 5
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 31
Decollo di un jet
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 32
Decollo di un jet
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 33
Altro modo di risolvere
il problema del decollo
Supponiamo di non avere le equazioni del moto ma di avere le
equazioni alle differenze (dx/dt=viniz + ax*t; ecc..)
x(t)
Integratore y(t)
Condizioni z(t)
iniziali dx/dt, dy/dt,
x0,y0,z0,… x,y,z,… dz/dt, ….
Equazioni alle differenze roll(t)
pitch(t)
yaw(t)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 34
Alcune applicazioni famose
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 36
Attrattori strani (2D)
% pickover system
close all
% costanti
a = 2.15; b = 1.75; c = 0.98; d = 1.4;
% punto iniziale
x = 1; y = -1;
X = []; Y = [];
for i=1:1000000
x = sin(b*y)+c*sin(b*x);
y = sin(a*x)+d*sin(a*y);
X = [X x];
Y = [Y y];
Lancia programma pickover2.m
if (~mod(i,10000) & i>0)
plot(X,Y, 'k.', 'MarkerSize' , 1);
title ( [ 'numero punti =' num2str(i)] );
drawnow; hold on;
i
end
end
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 37
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 38
Altri attrattori strani
dx/dt = funzione1(x,y,z)
dy/dt = funzione2(x,y,z)
dz/dt = funzione3(x,y,z)
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 40
Attrattore di Lorentz (3D)
1. Partendo da un punto iniziale possiamo calcolare in un passaggio i prossimi dx,
dy, e dz del punto.
2. Essi sommati al punto iniziale determinano una nuova posizione nello spazio
x,y,z
3. Torniamo al punto 1 usando i nuovi x, y, z
dx/dt = 10(y-x)
dy/dt = x(28-z)-y
dz/dt = x*y- 8/3z
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 41
Attrattore di Lorentz (3D)
• Vogliamo decidere un punto iniziale,
applicarlo alle equazioni differenziali e
calcolare le traiettorie
Punto iniziale X, Y, Z
solver
x0, y0, z0, (ordinary differential equation )
asse tempi
x, y, z
Derivata
di x,y,x
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 42
Attrattore di Lorentz (3D)
function dy = modello(t,y)
% parametri
sigma = 10; b = 8/3; r = 28;
File modello.m
modello
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 43
Attrattore di Lorentz (3D)
% parametri per l'integrazione numerica
% Tolleranza Errore Relativo = 1e-4
% Tolleranza Errore Assoluto = 1e-5 sulle 3 variabili
options = odeset('RelTol',1e-4,'AbsTol',[1e-5 1e-5 1e-5]);
% plotting
close all;
subplot(5,1,[1 4])
plot3(x(:,1), x(:,2), x(:,3))
grid on
xlabel x; ylabel y; zlabel z;
title('Attrattore di Lorentz')
File integrazione.m
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 44
Attrattore di Lorentz (3D)
Attrattore di Lorentz
50
40
30
z
20
10
0
30
20
10 20
15
0 10
5
-10 0
-5
-20 -10
-30 -15
-20
y x
20
x(t)
-20
0 10 20 30 40 50 60 70 80 90 100
t
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 45
Superfici frattali
function a=plasma(n)
% Elegant, fast, non-recursive way to create a plasma
% fractal PLASMA(n) takes one argument n , where
% 2^(2+n) is the size of the square plasma matrix.
% The default value of n is 6, which gives a
% 256 x 256 matrix
%
% Arjun Viswanathan 1999
randn('state',sum(clock*100));
t=cputime;
a=rand(4);
if nargin<1
n=6;
end
for i=1:n;
r=size(a,1);c=size(a,2);
xi=[1:(r-1)/(2*r-1):r];
yi=[1:(c-1)/(2*c-1):c];
a=interp2(a,xi,yi','cubic');
step=2^(-i);
dev=rand(size(a)).*step-2*step;
a=a+dev;
end Figura ottenuta da creaplasma.m
close all;
surfl(a);
shading flat; colormap winter; axis square;
grid off; axis on; savtoner save
figure;
pcolor(a);
shading flat; colormap bone;
axis square; savtoner save
Eventualmente si
aumenta il
realismo
calcolando la
deformazione
prospettica della
matrice
E’ possible
calcolare le
ombre e
proiettarle
Figura disponibile in
http://www.fractal-landscapes.co.uk/photos.html
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 48
Top spin
Immaginiamo di dover simulare il moto di una pallina da tennis
durante un servizio con top spin per un videogioco
Massa palla = 58 gr
Diametro = 6 cm
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 49
Effetto Magnus
L’effetto della rotazione in volo di una sfera provoca una forza
perpendicolare sia all’asse di rotazione, sia all’avanzamento:
l’effetto Magnus
FLift = π 2 ρ v r3 ω
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 50
Top spin - modello
function dy = modello(t, y) y(1) = x
% parametri dy(1) = dx/dt
m = 0.058 ; % Projectile mass (given), kg y(2) = y
g = 9.8 ; % acceleration due to gravity(given), m/sˆ2 dy(2) = dy/dt
t
omega = 20 ; % spin in radians per second
radius = 0.06 ; % radius of projectile (given), m
RHO = 1.225 ; % kg/m^3 modello
% Forza di Magnus
v
x
C = pi * RHO * RHO * radius^3 * omega;
File modello.m
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 51
Top spin - integrazione
% Fabio Scotti - Modello di palla da tennis con top-spin
% parametri per l'integrazione numerica
% Tolleranza Errore Relativo = 1e-4
% Tolleranza Errore Assoluto = 1e-4 sulle 3 variabili
options = odeset('RelTol',1e-4,'AbsTol',[1e-5 1e-5 ]);
% plotting
close all;
plot(x(:,1), x(:,2))
xlabel(‘x’); ylabel(‘x’); title('Palla con top spin')
savtoner save;
File integrazione.m
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 52
Toolbox per la realtà virtuale
Matlab fornisce un utile toolbox per la
realtà virtuale che permette di integrare i
modelli sviluppati (sia programmati sia
espressi in SIMULINK) con gli strumenti per
la visualizzazione 3D
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 53
Toolbox per la realtà virtuale
The toolbox links MATLAB and Simulink with
virtual reality graphics, enabling MATLAB or
Simulink to control the position, rotation, and
dimensions of the 3-D images defined in the
virtual reality environment.
http://www.mathworks.com/products/virtualreality/description1.html
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 54
Toolbox per la realtà virtuale
Il toolbox Virtual Reality di Matlab contiene numerosi
demo che possono essere lanciati da riga di comando
che descrivono molto bene le funzionalità disponibili.
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 55
Esempi in Matlab
Bouncing ball
>>vrbounce
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 56
Esempi in Matlab
Control inverted pendulum
>>vrpend
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 57
Esempi in Matlab
Solar system
>>vrplanets
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 58
Esempi in Matlab
Skoda Octavia Simulation
>> vr_ocatvia
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 59
Esempi in rete
http://mehr.sharif.ir/~colahi/Projects/Project27.html
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 60
Esempi in rete
http://mehr.sharif.ir/~colahi/Projects/Project48.html
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 61
Riferimenti
1. www.mathworks.com
2. Chaos and Fractals, a short trip in fractional dimensions. © CSE -
L.Cavin, 2003, 2004
3. M_Map: A mapping package for Matlab
4. Help in linea di Matlab, ver R14
5. http://www.fractal-landscapes.co.uk/photos.html
6. http://mathworld.wolfram.com/StrangeAttractor.html
7. http://media.ps2.gamespy.com
Smash Court Tennis Pro Tournament 2 (PlayStation 2)
8. http://it.wikipedia.org/wiki/Tennis
9. D.M. Bourg, "Physics for game developers", O'Reilly, 2002
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 62