Appendici A-1
A.1
Simulazione dell’interazione tra le zampe e il substrato
clear all; close all;%Segue l'impostazione del filmato
aviobj = avifile('legs.avi', 'fps', 30, 'quality', 100, 'compression', 'Cinepak'); %Si definiscono i parametri utilizzati per la simulazione
%N è numero di segmenti longitudinali per il tubo %M ènumero di frame, frammenti, per il filmato N = 10;
M = 100;
%I vertici anteriori sono 10 equispaziati lungo l’ellisse che %definisce la prima sezione di estremità del tubo
%I vertici anteriori si trovano in x=10
Vt_f =[linspace(10,10,N)', 0.7*cos(linspace(0,2*pi,N))', 0.3*sin(linspace(0,2*pi,N))',]; %I vertici posteriori sono 10 equispaziati lungo l’ellisse che
%definisce la seconda sezione di estremità del tubo %I vertici posteriori si trovano in x=-5
Vt_r =[linspace(-5,-5,N)', 0.7*cos(linspace(0,2*pi,N))', 0.3*sin(linspace(0,2*pi,N))',]; for i = 1:M
%Si definiscono le coordinate dei vertici delle zampe
%Ci sono 3 zampe anteriori poste a 120 gradi le une rispetto %alle altre in moto ellittico sui piani xz e xy di raggi 0.8 e 1.5 %I 360 gradi della rotazione sono divisi in M parti, quindi ad ogni %Frame si considera un incremento della posizione pari a 1/M*2*pi V_f = [5+1.5*sin(j/M*2*pi), 0, 0.7+0.8*cos(j/M*2*pi);
5+1.5*sin(j/M*2*pi), -(0.7-0.8*cos(j/M*2*pi))*sin(pi/3),… (0.7-0.8*cos(j/M*2*pi))*sin(pi/6);
Appendici A-2
(0.7+0.8*cos(j/M*2*pi))*sin(pi/6)];
%A seguire si seleziona la prima colonna di V_f0 e le si sottrae 5, %Cioè si trasla indietro di 5 la posizione delle zampe definendo quelle %Posteriori dotate dello stesso moto delle prime
%Si considerano zampe ruotate di 60 gradi rispetto alle prime attorno %Ad un asse parallelo a x
V_f0 = V_f;
V_f0(:,1) = V_f(:,1)-5;
V_r = V_f0*[1, 0, 0; 0, sin(pi/6), sin(pi/3); 0, -sin(pi/3), sin(pi/6)]; %Quella sotto è la matrice dei vertici
X = [Vt_f; V_f; V_r; Vt_r];
%Quindi si fa la triangolazione. Si definisce la superficie costruita attraverso %I triangoli che uniscono i vertici in X in modo che tutti gli altri stiano al di sotto %Dei piani su cui giacciono detti triangoli.
%v(i) rappresenta il volume racchiuso.
%K è una matrice le cui righe determinano i vertici dei triangoli [K,v(i)] = convhulln(X)
%Quindi si escludono i triangoli che non interessano. %Sono quelli che chiudono le facce estreme del tubo.
%Lo si fa selezionando quelli che connettono tre vertici della sezione di estremità e %mettendo a zero la corrispondente colonna di K
K(sum((K<N+1),2)==3,:) = []; K(sum((K>N+8),2)==3,:) = [];
%Comandi per l’impostazione del filmato
patch('Vertices',X,'Faces',K,'FaceVertexCdata',[ones(size(X,1),1)*[1 0 0]],... 'FaceColor','interp','EdgeColor','none');
alpha(1); axis equal;
Appendici A-3 set(gca,'CameraPosition',[30 10 11],'CameraTarget',... [2.5 0 0],'CameraUpVector',[0 0 1],'CameraViewAngle',8.23,'XColor',... 'w','YColor','w','ZColor','w'); light('Color','w','Position',[2.5 10 10]); hold on; plot3(X(N+1:N+8,1),X(N+1:N+8,2),X(N+1:N+8,3),'o','MarkerFaceColor',... 'k','MarkerEdgeColor','k','MarkerSize',8); set(gcf,'Color','w'); F = getframe(gcf); aviobj = addframe(aviobj,F); clf; end aviobj = close(aviobj);