• Non ci sono risultati.

A.4 Calcolo della lunghezza della sezione deformata della membrana

N/A
N/A
Protected

Academic year: 2021

Condividi "A.4 Calcolo della lunghezza della sezione deformata della membrana"

Copied!
10
0
0

Testo completo

(1)

A.4 Calcolo della lunghezza della sezione deformata della membrana

clear all; close all;

%Definizione dei parametri di analisi (le dimensioni sono in SI ) N = input('Inserire il numero di segmenti longitudinali N='); for u = [0:1000] if (N= =0) | (N= =1) N = input('Inserire un valore di N>1, N='); u = 0; else u = 1000; end end

M = input('Inserire il numero di frazionamenti temporali M='); for u = [0:1000] if M==0 M = input('Inserire un valore di M>0, M='); u = 0; else u = 1000; end end

t = input('Inserire istante di analisi t=');

%Introduzione dei punti e costruzione della triangolazione

%La sezione anteriore del tratto di tubo simulato è posta in x=0.04 Vt_f =[linspace(0.04,0.04,N)', 0.015*cos(linspace(0,2*pi,N))', 0.015*sin(linspace(0,2*pi,N))'];

%La sezione posteriore del tratto di tubo simulato è posta in x=-0.04 Vt_r =[linspace(-0.04,-0.04,N)', 0.015*cos(linspace(0,2*pi,N))', 0.015*sin(linspace(0,2*pi,N))'];

(2)

%Quelle sotto sono le coordinate dei vertici delle zampe

%Si considera un incremento della posizione per ogni frame pari a 1/M*2*pi V_f = [0.025+0.020*sin(t/M*2*pi), 0, 0.015+0.015*cos(t/M*2*pi); 0.025+0.020*sin(t/M*2*pi+2*pi/3), -(0.015+0.015*cos(t/M*2*pi+2*pi/3))*sin(2*pi/3), (0.015+0.015*cos(t/M*2*pi+2*pi/3))*cos(2*pi/3); 0.025-0.020*sin(t/M*2*pi+4*pi/3), -(0.015+0.015*cos(t/M*2*pi+4*pi/3))*sin(4*pi/3), (0.015+0.015*cos(t/M*2*pi+4*pi/3))*cos(4*pi/3)];

%A seguire si seleziona la prima colonna di V_f e le si sottrae 5, %cioè si trasla indietro di 5 la posizione delle zampe definendo quelle %posteriori dotate dello stesso moto delle prime

V_f0 = V_f;

V_f0(:,1) = V_f(:,1)-0.05;

V_r = V_f0*[1, 0, 0; 0, cos(pi/3), sin(pi/3); 0, -sin(pi/3), cos(pi/3)]; %X è la matrice dei vertici

X = [Vt_f; V_f; V_r; Vt_r];

%Ciclo di approssimazione dei dati in ingresso dimx = size(X,1); for ii=[1:dimx] for jj=[1:3] w = round(X(ii,jj)*10^6)/10^6; X(ii,jj) = w; end end

%Si definisce quindi la matrice di triangolazione TR TR = convhulln(X);

%Si escludono i triangoli che chiudono le facce estreme del tubo. %Si selezionano quelli che connettono tre vertici della sezione di %estremità e si mette a zero la corrispondente riga di TR

(3)

TR(sum((TR<N+1),2)= =3,:) = []; TR(sum((TR>N+6),2)= =3,:) = []; vtr = size(TR,1);

%Vettore del numero dei punti di intersezione nint = [];

%Vettore delle coordinate dei punti di intersezione pint = [];

%Vettore delle lunghezze calcolate lsezione = [];

%CICLO DI CALCOLO DELLA LUNGHEZZA DELLE SEZIONI for f = [1:6];

%Si utilizzano le dimensioni delle matrici dei vertici e di quelle di %triangolazione

n = size(X,1); m = size(TR,1);

%Quindi si definisce il piano tramite un punto dello stesso ed un %vettore normale

p0 = X(N+f,:); p1 = [1, 0, 0];

%Si ordinano i vertici dei triangoli a = X(TR(:,1),:);

b = X(TR(:,2),:); c = X(TR(:,3),:);

%Si verifica la presenza di intersezioni utilizzando i valori assoluti %dei prodotti scalari

(4)

da = (a-repmat(p0, m, 1))*p1'; db = (b-repmat(p0, m, 1))*p1'; dc = (c-repmat(p0, m, 1))*p1';

%Si costruisce il vettore k in cui si ordinano tutti i triangoli cui %corrispondono intersezioni col piano

k = (da>0)+(db>0)+(dc>0); k = find((k= =1)|(k= =2));

%xyzp è il vettore dei punti di intersezione xyzp = [];

%CICLO PER LA DETERMINAZIONE DEI PUNTI DI INTERSEZIONE for i = k'

%Verifica dei primi due vertici if sum((da(i)= =0)+(db(i)= =0)= =2) xyz0 = [X(TR(i,1),:);X(TR(i,2),:)]; xyzp = [xyzp;xyz0]; elseif (da(i)*db(i)) <= 0 t = abs(da(i))/(abs(da(i))+(abs(db(i)))); xyz0 = X(TR(i,1),:)*(1-t)+X(TR(i,2),:)*t; xyzp = [xyzp;xyz0]; end

%Verifica dei vertici 1 e 3

if sum((da(i)= =0)+(dc(i)= =0)= =2) xyz0 = [X(TR(i,1),:);X(TR(i,3),:)]; xyzp = [xyzp;xyz0]; elseif (da(i)*dc(i)) <= 0 t = abs(da(i))/(abs(da(i))+(abs(dc(i)))); xyz0 = X(TR(i,1),:)*(1-t)+X(TR(i,3),:)*t; xyzp = [xyzp;xyz0]; end

(5)

%Verifica dei vertici 2 e 3

if sum((db(i)= =0)+(dc(i)= =0)= =2) xyz0 = [X(TR(i,2),:);X(TR(i,3),:)]; xyzp = [xyzp;xyz0]; elseif (db(i)*dc(i)) <= 0 t = abs(db(i))/(abs(db(i))+(abs(dc(i)))); xyz0 = X(TR(i,2),:)*(1-t)+X(TR(i,3),:)*t; xyzp = [xyzp;xyz0]; end end dimxyzp = size(xyzp,1); for ii=[1:dimxyzp] for jj=[1:3] w = round(xyzp(ii,jj)*10^6)/10^6; xyzp(ii,jj) = w; end end xyz = unique(xyzp,'rows'); dimxyz = size(xyz,1);

% Quindi si introducono una serie di vettori utilizzati da appoggio % per il processo di ordinamento

xyz11 = []; xyz21 = []; xyz22 = []; xyz12 = []; xyz01 = []; xyz10= []; xyz20 = []; xyz02 = [];

(6)

% Si entra in un ciclo che scorre le righe della matrice dei punti di intersezione % mandandole in una serie di sottomatrici in funzione del quadrante in cui % questi si trovano

for p = [1:dimxyz]

%Si utilizza la tg dell'angolo che ne definisce la posizione come criterio di %ordinamento dei punti d'intersezione

%Punti sull'asse Y positivo if (xyz(p,3)= =0 & xyz(p,2)>0) xyz01 = [xyz01;xyz(p,:)];

%Primo quadrante

elseif (xyz(p,3)>0 & xyz(p,2)>0) xyz11 = [xyz11;xyz(p,:)];

%Punti sull'asse Z positivo

elseif (xyz(p,3)>0 & xyz(p,2)= =0) xyz10 = [xyz10;xyz(p,:)];

%Secondo quadrante

elseif (xyz(p,3)>0 & xyz(p,2)<0) xyz21 = [xyz21;xyz(p,:)];

%Punti sull'asse Y negativo

elseif (xyz(p,3)= =0 & xyz(p,2)<0) xyz20 = [xyz20;xyz(p,:)];

%Terzo quadrante

elseif (xyz(p,3)<0 & xyz(p,2)<0) xyz22 = [xyz22;xyz(p,:)];

%Punti sull'asse Z negativo

elseif (xyz(p,3)<0 & xyz(p,2)= =0) xyz02 = [xyz02;xyz(p,:)];

(7)

%Quarto quadrante

elseif (xyz(p,3)<0 & xyz(p,2)>0) xyz12 = [xyz12;xyz(p,:)]; end

end

%Si ordinano i termini di ogni sottomatrice utilizzando due cicli for. %Il ciclo interno calcola il vettore delle tangenti, quello esterno ne %estrae l'indice della riga cui corrisponde il minimo per definire il %punto relativo %Primo quadrante q11 = size(xyz11,1); xyz11ord = []; for s = [1:q11] tg=[]; q1 = size(xyz11,1); for ra = [1:q1] tg1 = xyz11(ra,3)/xyz11(ra,2); tg = [tg; tg1]; end [k1,k] = min(tg); xyz11ord = [xyz11ord;xyz11(k,:)]; xyz11(k,:)=[]; end %Secondo quadrante q21 = size(xyz21,1); xyz21ord = []; for s = [1:q21] tg=[]; q2 = size(xyz21,1); for ra = [1:q2] tg1 = xyz21(ra,3)/xyz21(ra,2);

(8)

tg = [tg; tg1]; end [k1,k] = min(tg); xyz21ord = [xyz21ord;xyz21(k,:)]; xyz21(k,:)=[]; end %Terzo quadrante q22 = size(xyz22,1); xyz22ord = []; for s = [1:q22] tg=[]; q3 = size(xyz22,1); for ra = [1:q3] tg1 = xyz22(ra,3)/xyz22(ra,2); tg = [tg; tg1]; end [k1,k] = min(tg); xyz22ord = [xyz22ord;xyz22(k,:)]; xyz22(k,:)=[]; end %Quarto quadrante q12 = size(xyz12,1); xyz12ord = []; for s = [1:q12] tg=[]; q4 = size(xyz12,1); for ra = [1:q4] tg1 = xyz12(ra,3)/xyz12(ra,2); tg = [tg; tg1]; end [k1,k] = min(tg); xyz12ord = [xyz12ord;xyz12(k,:)];

(9)

xyz12(k,:)=[]; end

%Alla fine si definisce la matrice dei punti ordinati in senso antiorario a %partire dall'asse Y positivo

xyzord= [xyz01;xyz11ord;xyz10;xyz21ord;xyz20;xyz22ord;xyz02;xyz12ord;];

%Il vettore v1 è utilizzato per il calcolo della lunghezza della spezzata di intersezione dimxyzord = size(xyzord,1);

vl = 0;

%Detto calcolo si fa sommando le distanze tra i vari punti adiacenti in un ciclo for %quindi si somma a quanto ottenuto la distanza tra il primo e l'ultimo

%termine della serie b = 0; for i = [1:dimxyzord] if xyzord(i,:)==X(N+f,:) b = b+1; end end if b>0 for z = [1:dimxyzord-1] lun = sqrt((xyzord(z+1,1)-xyzord(z,1))^2+... (xyzord(z+1,2)-xyzord(z,2))^2+... (xyzord(z+1,3)-xyzord(z,3))^2); vl = [vl;lun]; end vl = [vl;sqrt((xyzord(1,1)-xyzord(dimxyzord,1))^2+... (xyzord(1,2)-xyzord(dimxyzord,2))^2+... (xyzord(1,3)-xyzord(dimxyzord,3))^2)]; lun = sum(vl); else lun = 0; end

(10)

%Si raccolgono i risultati in tre vettori già definiti sopra nint = [nint;dimxyzord];

pint = [pint;xyzord]; lsezione = [lsezione;lun];

Riferimenti

Documenti correlati

Intervento di riqualificazione urbana a Marina di Cecina Tesi di Laurea.

Per valutare la possibilità di iniziare l’istruzione di gruppo già nell’età prescolare, la Divisione Pediatrica dell’Ospedale di Lanusei, nell’ambi- to di un

Lo scopo dello studio è stato quello di confrontare la frequen- za per mese di nascita di pazienti diabetici di tipo 1 rispetto a soggetti di controllo nati e residenti nella

Sebbene il diabete mellito rappresenti una delle principali cause di ricovero in ambiente internistico, le caratteristiche dei diabetici ricoverati nelle UO di Medicina Interna

I pazienti diabetici, rispetto ai solo obesi, hanno mostrato un incremento post- prandiale della chilomicronemia, così come una ridotta attività della LPL del tessuto adiposo sia

Politecnico di Milano | Scuola di Architettura Urbanistica Ingegneria delle Costruzioni, Corso di Laurea Magistrale in Architettura Ambiente costruito - Interni | Anno

Nel caso di operazioni relative alle nuove imprese (quelle che sono state costituite o hanno iniziato la propria attività non oltre tre anni prima della richiesta di ammissione

Per le sezioni Speciali, sono stabilite modalità semplificate di accesso tramite l’adeguamento dei modelli di valutazione economico-finanziaria (vedi Parte VI delle