Sei sulla pagina 1di 62

Matlab, modelli e realtà virtuale

Breve seminario per gli alunni del corso


Modelli fisici per la realtà virtuale

Fabio Scotti

Università degli studi di Milano


Dipartimento di Tecnologie per l’informazione
Sommario
• Introduzione all’ambiente Matlab mediante
esempi applicativi

• Matlab per fare che cosa ?

• In che modo è meglio procedere ?

• Tecniche di visualizzazione

• Esempi ed applicazioni con codice


commentato

• Alcune applicazioni famose

• Toolbox Matlab per la realtà virtuale

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)

2. Individuazione delle ingressi e delle uscite


del sistema/modello (le variabili)

3. Scrittura/programmazione del modello

4. Controllo con dati reali o sintetici

5. Visualizzazione dei risultati


(ingressi, uscite, stati interni, relazione fra gli ingressi e le uscite,
relazione delle grandezze rispetto ai parametri, animazioni ecc.)

6. …se serve, ritornare ai punti precedenti

Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 6
Partire dal semplice …

Lancia programma pendolo-triplo.m


(costruzione di un sistema di equazioni per
un pendolo triplo e sua simulazione)

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

Punti in 1-2-3D e nel tempo,


superfici, vettori, flussi, volumi,
animazioni
Primi esempi con dati 1D
Creare una funzione sin(x^2) e visualizzare il suo
andamento nel dominio [0, 5].

% plotta un seno di x^2


x=0:0.05:5; 1

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].

% plotta la derivata (ad un passo) di seno di x^2


x=0:0.05:8;
y=sin(x.^2);
yd=diff(y);
1

0.8

0.6

hold on; 0.4

plot(x,y,'b'); 0.2

plot(x(2:end),yd,'r'); 0

hold off; -0.2

-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]')

y=sin(x 2) e la sua derivata in [0 8]


1

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

load penny ; % la matrice delle altezze e' P


P = flipud(P); % giro la matrice sottosopra

subplot(2,2,1) % primo subplot di quattro (2 x 2)


surf(P);

subplot(2,2,2) % secondo subplot di quattro (2 x 2)


mesh(P);

subplot(2,2,3) % terzo subplot di quattro (2 x 2)


pcolor(P);
shading flat % toglie le righe nere attorno ai tasselli di colore

subplot(2,2,4) % quarto subplot di quattro (2 x 2)


contour(P);

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

surf(Z); xlabel('x'); ylabel('y'); zlabel('z');

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

indica il modulo della pendenza'); 0.05

% per avere una scala e per avere il massimo in rosso 0.04

colorbar; colormap jet ; 0.03


-0.5
2 0.02
1 2
0 1 0.01
0
-1 -1
y -2 -2
x

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)

ezsurf(‘funzione simbolica, dominio)


1

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

lim=axis ; % registro gli assi 0

for n=1 :50 % registra le immagini


-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)

In pratica vogliamo visualizzare per bene le equazioni


spazio(t) = velocità_iniziale * t + 0.5 * accelerazione * t^2

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];

vx0 = 0; % parte da fermo

% ricordiamo le formule da usare


% velocita(t) = velocita'iniziale + accelerazione * t
% spazio(t) = velocita'iniziale * t + 0.5 * accelerazione * t^2

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 ;

if Vx<50 % sotto i 50 m/s non decolla


z = 0;
tempoDecollo = t;
Calcolo delle
else % decolla variabili negli
z = 0.5 * az * (t-tempoDecollo)^2 ; istanti di tempo
end da considerare
X = [ X x ];
Y = [ Y 0 ]; % non si muove mai lungo l'asse Y
Z = [ Z z ];

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)

Vedremo un esempio risolto con questa tecnica più avanti…

Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 34
Alcune applicazioni famose

Frattali, caos ed attrattori,


creazioni di ambienti sintetici
Attrattori strani (2D)
x = sin(b y) + c sin(b x)
y = sin(a x) + d sin(a y)

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

Le lettere dalla A alla Y stanno


ai coefficienti quadratici dalla forma quadratica
da -1.2 a 1.2 con passo 0.1
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 39
Gli attrattori strani (3D)
Similmente alla cinematica dove un punto si muove nello spazio (dx,dy,dx) ogni dt
per effetto di forze che dipendono dal punto e della sua inerzia (es. il sistema
solare), immaginiamo il caso che un punto si muova in funzione SOLO della sua
posizione secondo le seguenti equazioni

dx/dt = funzione1(x,y,z)
dy/dt = funzione2(x,y,z)
dz/dt = funzione3(x,y,z)

sphere; axis equal; axis( [-5 5 -5 5 -5 5 ]);


savtoner save; xlabel('x');ylabel('y'); zlabel('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

Questo sistema di equazioni


non lineari nel tempo
è conosciuto come
Attrattore di Lorentz

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

modello 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 42
Attrattore di Lorentz (3D)

function dy = modello(t,y)
% parametri
sigma = 10; b = 8/3; r = 28;

% inizializzo l'incremento a zero


dy = zeros(3,1);

% scrivo le equazioni di Lorentz y(1) = x dy(1) = dx/dt


dy(1) = sigma*(y(2)-y(1));
dy(2) = r*y(1)-y(2)-y(1)*y(3); y(2) = y dy(2) = dy/dt
dy(3) = y(1)*y(2)-b*y(3);
y(3) = z dy(3) = dz/dt

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]);

% uso il modello per simulare le traiettorie


% passiamo il modello, l’asse temporale (inizio-fine) da esaminare ed il p.to iniziale
[t,x] = ode15s(@modello, [0 100],[0 -1 0], options);

% 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

Inventa tu un tuo algoritmo di


generazione della superficie
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 46
Superfici frattali
a = plasma(7);
% cerca di NON superare 7.. la procedura e' ricorsiva!

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

Figura ottenuta da creaplasma.m

Prova a cambiare le mappe di colore


con la funzione colormap
Matlab, modelli e realtà virtuale – Università degli studi di Milano – Fabio Scotti 47
Composizioni frattali
Partendo sempre
dalle matrici di
“plasma” si
combinano
“surf” e “plot” per
ottenere
montagne e nubi.

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

Top spin = 2400 RPM


(palla colpita in alto)

Massa palla = 58 gr

Diametro = 6 cm

(Dati Federazione Italiana Tennis)

Smash Court Tennis Pro Tournament 2 (PlayStation 2)

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 ω

Bourg, "Physics for game developers"

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

vx = 10 ; % velocita' iniziale della palla , m/s


vy =0 ; % velocita' iniziale della palla , m/s y

% Forza di Magnus
v
x
C = pi * RHO * RHO * radius^3 * omega;

% inizializzo l'incremento a zero


dy = zeros(2,1);

% scrivo le equazioni della palla NOTA: dy(1)= dx ; dy(2)= dy


dy(1) = vx + C / m * t * dy(2) % vx + contributo sull'asse x che nasce da vy
dy(2) = vy + C / m * t * dy(1) - g * t;
% vy + contributo sull'asse y che nasce da vx - accelerazione terrestre

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 ]);

% uso il modello per simulare le traiettorie


[t,x] = ode15s(@modello, [0 1],[1 1], options);

% plotting
close all;
plot(x(:,1), x(:,2))
xlabel(‘x’); ylabel(‘x’); title('Palla con top spin')
savtoner save;

Prova a migliorare la visualizzazione, confrontando le traiettorie al


variare dei parametri. Se vuoi disegnare più curve sullo stesso grafico
usa il comando:
>> hold on

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

Gli ambienti sono


in VRML

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.

The result is a presentation-quality 3-D


animation.

Through visualization, the Virtual Reality


Toolbox provides insight into the dynamic
systems that you model in Simulink.

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.

Ricordiamoci però che ...


….tutto parte da una buona idea ed un buon modello!

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