HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Sfera sweep  (Letto 1499 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
Sfera sweep
« il: 19 Agosto 2012, 21:00 »
Una versione di primitiva della sfera, che ho costruito, si basa su poligoni triangolari e quindi si può deformare a piacimento.
Consideriamone lo script dei vertici:

Vert   0, 0, 0  !Polo S
for j=1 to m-1
for i=0 to n-1
z=2*r/m*j       ! polo N
v=360/n*i
f=sqr(r^2-(z-r)^2) !f=f(z,v)
x=f*cos(v)
y=f*sin(v)
Vert x, y, z
next i
next j
Vert    0, 0, 2*r  !Polo N

Il vertice numero 1 è il polo Sud che coincide con l’origine, i successivi n vertici si trovano sul piano:
z=2*r/m
e formano un poligono regolare di n lati, corrispondente al primo parallelo.
Seguono quindi altri poligoni di n lati, per un totale di m poligoni, giacenti su piani orizzontali distanziati del valore 2*r/m, infine abbiamo il polo Nord,posto a quota 2*r.
La sfera può essere deformata in qualsiasi modo, purché ciascuno dei poligoni sia disposto nello stesso ordine. Ogni poligono potrebbe anche non giacere su un piano.  Le coordinate dei vertici potrebbero pertanto essere inserite manualmente una per una: prima il polo Sud, poi gli n vertici del primo poligono disposti in senso antiorario dall’alto, poi gli n vertici del successivo poligono e poi così via fino all’ultimo poligono m. Quindi andrebbero inserite le coordinate del polo Nord, per un totale di m*n + 2 vertici.
In particolare la sfera può essere deformata in modo da curvare l’asse sud-nord, facendo scorrere i paralleli orizzontalmente. Si potrebbero anche inclinare i paralleli in modo da mantenersi ortogonali alla curva generata dall’asse sud-nord, ma l’operazione diventa più complessa. In questo caso si avrebbe una alternativa alla primitiva SWEEP preconfezionata, che non funziona sempre tanto bene.
Per piegare l’asse secondo una curva, che può essere anche sghemba, basta aggiungere alle coordinate x,y dei vertici nuovi valori parametrici xc,yc che fanno slittare i punti in analogia al comando:
add xc,yc,0
Tali valori parametrici devono dipendere da z, in modo da definire la curva spaziale.
Il nuovo script dei vertici diventa:

h=  !semialtezza
r=  !raggio equatore

Vert xc(0), yc(0), 0  !Polo S
for j=1 to m-1
for i=0 to n-1
z=2*h/m*j
v=360/n*i
f=r/h*sqr(h^2-(z-h)^2)   !f=f(z,v)
x=f*cos(v)
y=f*sin(v)
xc=xc(z)
yc=yc(z)
Vert  x+xc, y+yc, z
next i
next j
Vert xc(2*h), yc(2*h), 2*h  !Polo N

Un’altro modo per ottenere un profilo curvo (sweep) consiste nell’inserire i paralleli entro una curva chiusa composta di due parti, una parte destra e una sinistra, definite rispettivamente dalle funzioni:
xd=xd(z)
xs=xs(z)
con xd(0)=xs(0) , xd(2*h)=xs(2*h) e xd>xs.
L’asse sud nord si troverà allora nei punti medi dei segmenti orizzontali tagliati dalle due funzioni.
Lo script dei vertici diventa:

Vert  xc(0), 0, z0
for j=1 to m-1
for i=0 to n-1
z=2*h/m*j
v=360/n*i
rj=( xd(z)-xs(z) )/2
x=rj*cos(v)
y=rj*sin(v)
xc=( xd(z)+xs(z) )/2
Vert x+xc, y, z  !Polo nord
next i
next j
Vert  xc(2*h), 0, 2*h

Come esempio allego gli oggetti:
sfera prim sweep2.gsm
che descrive il secondo caso relativo alla sfera che vede deformato il profilo secondo due curve diverse,
sfera prim sweep.gsm
dove il diametro sud-nord viene incurvato secondo un arco (piano),
sfera prim sweep es.gsm
dove il diametro sud-nord viene incurvato secondo un’elica (curva sghemba).

Grazie, alla prossima