HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Curve raccordate2  (Letto 1382 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
Curve raccordate2
« il: 08 Agosto 2012, 16:32 »
In questo post applico il profilo definito nel post precedente ad una primitiva.

Utilizzo come primitiva l’oggetto:
semisfera cava prim.gsm
che può essere deformata a piacere essendo composta di triangoli
(la base deve però rimanere piana).

Per variarne la forma si interviene sui vertici, sostituendo la funzione u=sqr(he^2-z^2), che definisce per l’estradosso la forma sferica, con la formula definita in precedenza.  L’intradosso lo lasciamo invariato, utilizzando la formula z=hi*sin(90/m*j)  che suddivide l’asse z in moduli disuguali, adatti per una cupola. L’altra formula z=hi/m*j suddivide in modo uguale l’asse e non è adatta per la forma sferica.
 
he=  !altezza estradosso
hi=   !altezza intradosso

base
!estradosso
for j=0 to m-1
for i=0 to n-1
v=360/n*i
z=he/m*j  !z=he*sin(90/m*j)   !j=0: z=0,j=m: z=hi
u=sqr(he^2-z^2)  !inserire funzione u=u(j,i) ovvero u=u(z,v)
x=u*cos(v)
y=u*sin(v)
Vert x0+x,y0+y,z0+z !n*m vertici
next i
next j
Vert x0,y0,z0+he !n*m+1 vertici

!intradosso
for j=0 to m-1
for i=0 to n-1
v=360/n*i
z=hi/m*j  !z=hi*sin(90/m*j)   !j=0: z=0,j=m: z=hi
w=sqr(hi^2-z^2)  !inserire funzione w=w(j,i) ovvero w=w(z,v)
x=w*cos(v)
y=w*sin(v)
Vert x0+x,y0+y,z0+z !n*m vertici
next i
next j
Vert x0,y0,z0+hi !n*m+1 vertici, tot=2*n*m+2


La nuova formula per l’estradosso è questa:

for i=0 to n-1 !j=0 parallelo base
v=360/n*i
x=r1*cos(v)
y=r1*sin(v)
Vert x0+x,y0+y,z0 !n*m vertici
next i

for j=1 to m-1
for i=0 to n-1
z=ht/m*j
t=tan(it)    !pendenza nel punto basso sin.(ellisse su II)
h=r2-r1    !altezza
L=h1    !base (semiluce)
a=sqr(abs((h^2/t^2+L^2-2*L*h/t)/(1-2*h/L/t)))
b=a*t/L*sqr(abs(a^2-L^2))
h2=ht-h1
am=r2/(1- cos(90+be))
y1=r1-b+h+b/a*sqr(abs(a^2-(z -L)^2))
y2=am*cos(  (z-h1)/h2*(90+be) )- am*cos(90+be)
yy1= y1* (sgn(z)-sgn(z-h1))/2
yy2= y2* (sgn(z-h1)-sgn(z-ht))/2
yp=an-an/(ht/2)^2*(z-ht/2)^2 !parabola di luce=ht, alt=an in [0,ht]
ro=yy1+yy2+an*(yy1+yy2)*abs(sin(180*w/n*i))
v=360/n*i+ga/m*j
x=ro*cos(v)
y=ro*sin(v)
Vert x0+x,y0+y,z0+z !n*m vertici
next i
next j

Vert x0,y0,z0+ht    !n*m+1 vertici, punta finale posta a quota ht


La prima parte riscrive l’anello di base a quota z0:

for i=0 to n-1
v=360/n*i
x=r1*cos(v)
y=r1*sin(v)
Vert x0+x,y0+y,z0
next i

E’ una circonferenza di raggio r1, che non deformiamo
(sarebbe possibile deformarla ma solo con r1=r1(v), in quanto deve rimanere sul piano).

La parte dello script che riscriviamo sotto, serve a definire il profilo,
composto dalle due curve raccordate y1 e y2, z è la variabile, che dipende a sua volta da j (altezze):

z=ht/m*j

t=tan(it)
h=r2-r1
L=h1
a=sqr(abs((h^2/t^2+L^2-2*L*h/t)/(1-2*h/L/t)))
b=a*t/L*sqr(abs(a^2-L^2))  !questi parametri definiscono l’arco di ellisse y1

h2=ht-h1
am=r2/(1- cos(90+be)) !questi parametri definiscono l’arco di sinusoide y2

y1=r1-b+h+b/a*sqr(abs(a^2-(z -L)^2))
y2=am*cos(  (z-h1)/h2*(90+be) )- am*cos(90+be)

yy1= y1* (sgn(z)-sgn(z-h1))/2     !la funzione sgn serve per azzerare le parti che non interessano
yy2= y2* (sgn(z-h1)-sgn(z-ht))/2

La parte successive comprende le w gobbe e la loro torsione di un angolo ga.
La parte con ga dipende da j perché ogni anello ruota di ga/m ad ogni parallelo successivo: ga/m*j
La parabola:    yp=an-an/(ht/2)^2*(z-ht/2)^2
che si azzera in 0 e in ht serve per far sfumare le gobbe alla base e alla sommità.
Assume il valore massimo an a metà altezza.
Una possibile alternativa all’uso della parabola sarebbe scrivere subito:
ro=yy1+yy2+an*(yy1+yy2)*abs(cos(180*w/n*i))
in modo che l’ampiezza delle gobbe segua il profilo, ma poi si crea una discontinuità,
non molto percettibile, con l’anello della base, che dovrebbe pure incurvarsi con gobbe.

yp=an-an/(ht/2)^2*(z-ht/2)^2 !parabola di luce=ht, alt=an in [0,ht]
ro=yy1+yy2+an*yp *abs(sin(180*w/n*i))
v=360/n*i+ga/m*j
x=ro*cos(v)
y=ro*sin(v)

ro è la proiezione su xy del raggio vettore che dal centro della base va ai punti.
La funzione:
abs(sin(180*w/n*i))
ha periodo è sempre positiva ad esclusione dei punti ove 180*w/n*i=0 o multipli di 180, dove si annulla.

Osserviamo che l’originario loop
for j=0 to m-1
è stato scomposto in due parti:
j=0
for j=1 to m-1
ll motivo è dovuto al fatto che le curve raccordate con abs assumono metà valore all’inizio e in coda, per tale motivo si è isolato il primo punto del profilo (j=0). Per l’ultimo punto non era necessario, perché era già isolato come polo Nord (j=m) e comunque assumeva il valore 0.

L’oggetto risultante è:
semisfera cava es1.gsm