HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Deformare una sfera  (Letto 1925 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
Deformare una sfera
« il: 27 Giugno 2012, 19:00 »
Nel post "solidi platonici2", ho inserito lo script per realizzare la primitiva di una sfera.  Forse, tra i pochi che leggono i miei posts, qualcuno si chiederà: a che serve tutta quella complicazione? Infatti il comando:
sphere r
fornisce già confezionata una bella sfera primitiva di raggio r centrata in O. Però su questa sfera non possiamo intervenire con deformazioni specifiche, cosa che invece possiamo fare sulla primitiva del nostro script agendo sui vertici.
Occorre ricordare, però, che, a parte le calotte, formate da triangoli, la sfera è composta di quadrangoli, che devono rimanere piani.  Per poter deformare la sfera a piacimento occorre riscrivere la primitiva della sfera con soli PGON triangolari, cosa che ho già fatto, ma che presenterò più tardi.
Per deformare la sfera basta considerare r=r(u,v) come funzione della latitudine v=180/m*j e della longitudine u=180/m*i
con  0<=u<360,  - 90<=v<=90
Perché la sfera si raccordi bene dovrebbe risultare:  r(0,v)=r(360,v)
Sicuramente, deformando soltanto i meridiani con la variabile v, lasciando circolari i paralleli, non risultano PGON quadrangolari sghembi, variando invece anche u in generale si generano PGON quadrangolari sghembi.  Pertanto la sfera costruita in questo modo si presta a generare superfici di rotazione, a meno di non utilizzare come variabile per u non il raggio r, ma la distanza dall’asse verticale per il centro della sfera: r*cos(v)
Ponendo  ad esempio r= (1+am*cos(v*f))* h, con f intero,
succede che per v=+/- 90 si annulla  am*cos(v*f)),  per cui i poli hanno sempre quota +/-h,
mentre in altri punti c’è uno spostamento lungo il raggio, positivo o negativo.
La variabile f definisce quanti picchi si creano.
Per ottenere la nuova superficie dalla sfera occorre intervenire solo sui vertici dello script:
Vert xc,yc,zc+r   !polo nord
for j=1 to m-1
for i=0 to 2*m-1
v=90-180/m*j    !j=0 polo N: v=90; j=m, polo sud: v=-90
u=180/m*i
Vert xc+r*cos(u)*cos(v),yc+r*sin(u)*cos(v),zc+r*sin(v)
next i
next j
Sopra abbiamo lo script della sfera di raggio r, sotto quello nuovo (con parametri h,am, f):
Vert xc,yc,zc+r   !polo nord
for j=1 to m-1
for i=0 to 2*m-1
v=90-180/m*j    !j=0 polo N: v=90; j=m, polo sud: v=-90
u=180/m*i
r= (1+am*cos(v*f))* h
Vert xc+r*cos(u)*cos(v),yc+r*sin(u)*cos(v),zc+r*sin(v)
next i
next j
r= h
Vert xc,yc,zc-r   !polo sud

Per poter operare anche sui paralleli occorre considerare come parametro non r ma r*cos(v):
Vert xc,yc,zc+r   !polo nord
for j=1 to m-1
for i=0 to 2*m-1
v=90-180/m*j    !j=0 polo N: v=90; j=m, polo sud: v=-90
u=180/m*i
 r= (1+am*sin(v*f))* h
Vert xc+ cos(u)* r*cos(v)*(1+ an*sin(u*g)),yc+sin(u)* r*cos(v)*(1+ an*sin(u*g)),zc+r*sin(v)next i
next j
r= h
Vert xc,yc,zc-r   !polo sud

 Di fatto abbiamo moltiplicato per un fattore del tipo (1+am*sin(v*f)), non solo il raggio r,
ma anche la proiezione su xy del raggio, data da  r*cos(v) , che è diventata:  r*cos(v)*(1+ an*sin(u*g)).
Questo tipo di deformazione essendo operata lungo i raggi ortogonali all’asse verticale, mantiene i PGON quadrilateri piani, come potete verificare dagli oggetti GDL che allego, costruiti in questo modo.
Variando i parametri potrebbero darvi delle idee per costruire oggetti di arredo, lampade o simili.
« Ultima modifica: 29 Giugno 2012, 22:06 da marcomasetti »