HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Lo strumento COONS  (Letto 2304 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

marcomasetti

  • Newbie
    ...sono qui da poco, il mio miglior amico è il pulsante RICERCA
  • *
  • Post: 183
Lo strumento COONS
« il: 08 Aprile 2013, 15:40 »
Lo strumento COONS permette di costruire una superficie delimitata da 4 curve che si toccano in 4 vertici A,B,C,D.  Ci sono infiniti modi per costruire una superficie interna ad un bordo.  Mi sono chiesto quale sia il metodo utilizzato dai programmatori per definire tale superficie: sicuramente è quello più elementare, basato sull’interpolazione lineare.  L’interpolazione lineare a 2 dimensioni è abbastanza semplice. Concretamente per passare da una funzione g ad una funzione f, per un parametro i variabile da 0 a m, con m intero, basta scrivere:
f+(g-f)*i/m
E’ evidente che per i=0 la nuova funzione vale f, mentre per i=m viene ad assumere valore g.
Tra i due valori estremi 0 e m, vengono ad inserirsi m-1  valori intermedi.
Come succede sempre quando si aumenta una dimensione le cose si complicano. Tuttavia ragionando nello stesso modo ed aiutandosi con uno schema grafico si trova la soluzione. 
                           
In pratica occorre interpolare linearmente le curve che sono disposte una di fronte all’altra, queste vanno sommate tra loro, sottraendo però quei valori che sono necessari per compensare il fatto che la superficie finale dovrà attraversare i 4 nodi A,B,C,D.   Ovvero, per semplificare, si immagina di costruire una rigata collegando due curve piane su piani verticali paralleli, questa rigata va poi deformata in modo da porre i punti A,B,C,D a quota 0. Si costruisce quindi una nuova rigata tra le due coppie di curve rimanenti, poste pure su due piani verticali paralleli, che si assumono ortogonali ai piani delle curve prededenti. Ogni punto della nuova superficie si alza poi della quota della rigata precedente, riportata con i punti A,B,C,D a quota 0.
Si ricava così una formula che può essere generalizzata al caso di curve sghembe. La formula può essere verificata per i casi:
i=0,j=0  e si ritrova il punto A
i=m,j=0  e si ricava il punto B
i=m,j=n  : punto C
i=0 ,j=n  : punto D
i variabile da 0 a m, j=0  e si ha la curva frontale anteriore Fm(i)=(fmx,fmy,fmz)
i variabile da 0 a m, j=n  e si ha la curva frontale posteriore Gm(i)=(gmx,gmy,gmz)
i=0, j variabile da 0 a n:   curva laterale destra Fn(j)=(fnx,fny,fnz)
i=m, j variabile da 0 a n:  curva laterale sinistra Gn(j)=(gnx,gny,gnz)

L’equazione della superficie è:
OP= Fn(j)+(Gn(j)-Fn(j))*i/m+Fm(i)+(Gm(i)-Fm(i))*j/n-(A+(B-A)*i/m+(D+(C-D)*i/m-(A+(B-A)*i/m)*j/n)
=Fn(j)+Fm(i)-A+(Gn(j)-Fn(j)-B-A)*i/m+(Gm(j)-Fm(j)-D-A)*j/n+(D-C+B-A)*i/m*j/n
Che corrisponde a tre equazioni parametriche in i,j, con i variabile da 0 a m e j variabile da 0 a n:
x=fnx+fmx-ax+i/m*(gnx-fnx-bx+ax)+j/n*(gmx-fmx-dx+ax)+i/m*j/n*(dx-cx+bx-ax)
y=fny+fmy-ay+i/m*(gny-fny-by+ay)+j/n*(gmy-fmy-dy+ay)+i/m*j/n*(dy-cy+by-ay)
z=fnz+fmz-az+i/m*(gnz-fnz-bz+az)+j/n*(gmz-fmz-dz+az)+i/m*j/n*(dz-cz+bz-az)
Naturalmente le 12 equazioni che definiscono le 4 curve devono verificare il passaggio delle curve per i 4 nodi:
A=(ax,ay,az)=Fm(0)=(fmx(0),fmy(0),fmz(0))=Fn(0)= (fnx(0),fny(0),fnz(0))
B=(bx,by,bz)=Fm(m)= (fmx(m),fmy(m),fmz(m))=Gn(0)= (gnx(0),gny(0),gnz(0))
C=(cx,cy,cz)=Gm(m)= (gmx(m),gmy(m),gmz(m))=Gn(n) = (gnx(n),gny(n),gnz(n))
D=(dx,dy,dz)=Gm(0)= (gmx(0),gmy(0),gmz(0))=Fn(n) = (fnx(n),fny(n),fnz(n))

Anche la primitiva predefinita COONS prevede la coincidenza delle curve sui nodi, che deve essere esplicitata, ripetendo i valori dei nodi comuni:
m=6
n=6
COONS m, n, 4+8+16+32+64,
0, 0, 5, !#1
1, 0, 4,
2, 0, 3,
3, 0, 2,
4, 0, 1,
5, 0, 0, !#m, fronte

0, 5, 0, !#m+1
1, 5, 1,
2, 5, 2,
3, 5, 3,
4, 5, 4,
5, 5, 5, !#2*m, retro

0, 0, 5, !#2*m+1, ripetuto #1
0, 1, 4,
0, 2, 3,
0, 3, 2,
0, 4, 1,
0, 5, 0, !#2*m+n, ripetuto #m+1

5, 0, 0, !#2*m+n+1, ripetuto #m
5, 1, 1,
5, 2, 2,
5, 3, 3,
5, 4, 4,
5, 5, 5  !#2*m+2*n, ripetuto #2*m
I valori di stato: 4,8,16,32 definiscono la visibilità delle curve che abbiamo nominato Fm,Gm,Fn,GN.
Se si montano diverse superfici COONS per costruire una superficie chiusa si cancellerà uno dei bordi di giunzione, annullando il valore di stato corrispondente. Annullare il valore 64 rende la superficia liscia.
Nel mio modo di definire la curva considero un nodo in più rispetto ai valori delle primitiva COONS, dato che un vertice assume valore 0, mentre là si parte da 1.
BASE
for j=0 to n
for i=0 to m

fmx= !definire le 12 funzioni
fmy=
fmz=
gmx=
gmy=
gmz=
fnx=
fny=
fnz=
gnx=
gny=
gnz=
x=fnx+fmx-ax+i/m*(gnx-fnx-bx+ax)+j/n*(gmx-fmx-dx+ax)+i/m*j/n*(dx-cx+bx-ax)
y=fny+fmy-ay+i/m*(gny-fny-by+ay)+j/n*(gmy-fmy-dy+ay)+i/m*j/n*(dy-cy+by-ay)
z=fnz+fmz-az+i/m*(gnz-fnz-bz+az)+j/n*(gmz-fmz-dz+az)+i/m*j/n*(dz-cz+bz-az)
VERT x, y, z
next i
next j

for j=0 to n
for i=1 to m
EDGE i+j*(m+1),i+1+j*(m+1),-1,-1,0
next i
next j !frontali
for j=0 to n-1
for i=1 to m+1
EDGE i+j*(m+1),i+(j+1)*(m+1),-1,-1,0
next i
next j !ortogonali
for j=0 to n-1
for i=1 to m
EDGE i+j*(m+1),i+1+(j+1)*(m+1),-1,-1,0
next i
next j !obliqui

for j=0 to n-1
for i=1 to m
PGON 3,0,-1,i+j*m,m*n+m+1+i+j*(m+1),-(2*m*n+m+n+i+j*m)
PGON 3,0,-1,-(i+(j+1)*m),-(m*n+m+i+j*(m+1)),2*m*n+m+n+i+j*m
next i
next j
for j=0 to n-1
for i=1 to m

Body -1

Come esempi allego un paraboloide rigato, ottenuto generalizzando l’esempio di COONS sopra riportato:
coons.gsm
ed una superficie ottenuta utilizzando per il contorno 4 curve sghembe di Bèzier del terzo ordine:
coons es.gsm
Ritengo questo ultimo esempio particolarmente interessante, perché può servire come elemento di superficie 3D omologo ad una curva di Bézier sul piano. Combinando diversi di questi elementi si può costruire una superficie di qualsiasi forma. Naturalmente la costruzione diventa complessa, perché ogni vela richiede 4 punti e 8 tangenti, per un totale di 12x3=36 parametri.
L’utilità nel costruire una primitiva personale al posto del COONS risiede nel fatto che, a partire da questo procedimento, si può costruire una unica primitiva composta di un cuboide di 6 facce, al posto di 6 singole superfici accostate. Oppure si può utilizzare una diversa forma di triangolazione.