• Non ci sono risultati.

A.2 Funzione di slice

N/A
N/A
Protected

Academic year: 2021

Condividi "A.2 Funzione di slice"

Copied!
3
0
0

Testo completo

(1)

Appendici A-4

A.2

Funzione di slice

%Si assuma che il piano sia rappresentato attraverso un suo punto(P0) ed il vettore ad esso %ortogonale (P1) e che P0 e P1 siano vettori riga (1x3). Si suppone inoltre di conoscere %l’insieme dei punti su cui è basata la triangolazione come una matrice XYZ (nx3). %Infine, Si è assunto che la triangolazione stessa sia rappresentabile attraverso una matrice %(mx3) di interi dati dagli indici delle righe di XYZ.

%Detta matrice è chiamata TRI.

[x, y, z] = meshgrid([-1, 1], [-1, 1], [-1, 1]); XYZ = [x(:), y(:), z(:)]; tri = [1, 5, 6; 2, 1, 6; 3, 1, 5; 2, 3, 4; 2, 3, 1; 7, 5, 6; 7, 3, 5;… 8, 7, 6; 8, 2, 6; 8, 2, 4; 8, 3, 4; 8, 7, 3]; n = size(XYZ,1); m = size(tri,1); p0 = [0, 0, 0]; p1 = [sqrt(3)/2, 0, 0.5];

%Per prima cosa si determinano i triangoli che attraversano il piano %Il vertice 1 di ogni triangolo è:

a = XYZ(tri(:, 1), :);

%Allo stesso modo per i vertici 2 e 3: b = XYZ(tri(:, 2), :);

c = XYZ(tri(:, 3), :);

%Da quale parte del piano sono a, b e c? %Si usa il prodotto scalare:

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

%Se solo 1 o 2 degli angoli stanno dalla parte positiva del piano, allora quella faccia %attraversa il piano. k è una lista dei triangoli che attraversano il piano:

(2)

Appendici A-5

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

%Se k non è vuota, allora il piano ha delle intersezioni con l’oggetto: edgelist = [];

xyzp = []; j = 0; for i = k’; edgei = [];

%Did we cross edge ab? if (da(i)*db(i)) <= 0 j = j+1; edgei = [edgei,j]; t = abs(da(i))/(abs(da(i))+(abs(db(i)))); xyz0 = XYZ(tri(i,1),:)*(1-t)+XYZ(tri(i,2),:)*t; xyzp = [xyzp;xyz0]; end if (da(i)*dc(i)) <= 0 j = j+1; edgei = [edgei,j]; t = abs(da(i))/(abs(da(i))+(abs(dc(i)))); xyz0 = XYZ(tri(i,1),:)*(1-t)+XYZ(tri(i,3),:)*t; xyzp = [xyzp;xyz0]; end if (db(i)*dc(i)) <= 0 j = j+1; edgei = [edgei,j]; t = abs(db(i))/(abs(db(i))+(abs(dc(i)))); xyz0 = XYZ(tri(i,2),:)*(1-t)+XYZ(tri(i,3),:)*t; xyzp = [xyzp;xyz0]; end

edgelist = [edgelist; edgei]; end

(3)

Appendici A-6

%Edgelist è una lista delle coppie dei punti di estremità di segmenti sul piano di taglio. %Si riferisce alle righe della matrice xyzp. Tali estremi non sono ordinati

%HTH,

Riferimenti

Documenti correlati

Infatti, se e vero che ogni vettore di V si puo’ scrivere in almeno un modo come combinazione lineare dei vettori a, b, c, non e’ pero’ vero che tale scrittura e’

[r]

Una matrice quadrata in cui tutti gli elementi con indici diversi sono nulli si dice

In seguito useremo la seguente convenzione: quando un vettore v viene consid- erato come vettore colonna, verra’ indicato con lo stesso simbolo v, quando un vettore v viene

Come ogni altra matrice di proie- zione su un sottospazio di dimensione 1, la matrice v i v i ∗T ha rango unitario, ha un autovalore unitario e tutti gli altri

Date le seguenti matrici A e B, dire se sia possibile calcolare il prodotti AB e BA.. In caso sia

CdL in Informatica GEOMETRIA ed

Nel caso in cui invece M sia invertibile, si calcoli esplicitamente la matrice inversa M