HOME OGGETTI 3D LIBRI CORSI TUTORIAL FORUM SHOP CONTATTI   LOGIN









Autore Topic: Cilindro in sottomoduli  (Letto 1402 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
Cilindro in sottomoduli
« il: 17 Settembre 2012, 20:13 »
In questo esercizio,a partire dalla primitiva di un rettangolo diviso in sottomoduli, realizziamo una superficie cilindrica.

Il rettangolo è verticale con base sull’asse x,
è suddiviso in nr*nz sottomoduli di dimensioni lx/nr e h/nz.
Lo script relativo è:

lx=   !larghezza
h=    !laltezza
nr=
nz=
BASE
for j=0 to nz
for i=0 to nr
VERT  i*lx/nr, 0, j*h/nz
next i
next j

for j=0 to nz
for i=1 to nr
EDGE i+j*(nr+1), i+1+j*(nr+1),-1,-1,0
next i
next j !vettori paralleli asse x, da sin a dex

for j=0 to nz-1
for i=1 to nr+1
EDGE i+j*(nr+1), i+nr+1+j*(nr+1),-1,-1,0
next i
next j ! vettori paralleli asse z, da basso a alto

for j=0 to nz-1
for i=1 to nr
PGON 4, 0, -1, i+j*nr,nr*(nz+1)+i+1+j*(nr+1),-(i+nr+j*nr),-(nr*(nz+1)+i+j*(nr+1))
next i
next j
BODY -1

Per incurvarlo introduciamo il raggio r di curvatura al posto della lunghezza.
Sostituiamo poi nello script:
VERT  i*lx/nr,                0,                         j*h/nz
con
VERT r*cos(i*360/nr), r*sin(i*360/nr), j*h/nz

In questo modo i punti, originariamente allineati lungo la direzione di x,
si dispongono su una circonferenza orizzontale di raggio r, centrata in O.
Tuttavia, i punti iniziali e finali di ogni circolo vengono a coincidere,
per cui vengono ripetuti due volte sia i vertici che i segmenti che costituiscono la saldatura.
Pertanto eliminiamo il vertice finale di ogni circonferenza:
 
for i=0 to nr
VERT r*cos(i*360/nr), r*sin(i*360/nr), j*h/nz
next i  !nr+1 vertici

verrà sostituito con:

for i=0 to nr-1
VERT r*cos(i*360/nr), r*sin(i*360/nr), j*h/nz
next i !nr vertici

Così facendo, però, scombiniamo la numerazione relativa a EDGE e PGON.
Per saltare da un livello orizzontale al superiore,
ora l’indice degli edges aumenta di nr al posto di nr+1.
Pertanto dello script relativo agli edges occorre sostituire j*(nr+1) con j*n.
Inoltre l’ultimo EDGE di ogni circolo va a ricollegarsi con il primo punto del cerchio medesimo,
pertanto richiede di essere tolto dal loop per essere riscritto a parte.

In definitiva la parte di script:

for j=0 to nz
for i=1 to nr
EDGE i+j*(nr+1), i+1+j*(nr+1),-1,-1,0
next i
next j !vettori paralleli asse x, da sin a dex

for j=0 to nz-1
for i=1 to nr+1
EDGE i+j*(nr+1), i+nr+1+j*(nr+1),-1,-1,0
next i
next j ! vettori paralleli asse z, da basso a alto

va sostituita con:

for j=0 to nz
for i=1 to nr-1
EDGE i +j*nr, i+1+j*nr,-1,-1,0
next i
EDGE nr+j*nr,  1+j*nr,-1,-1,0
!i sostituito con nr nel primo indice ed eliminato nel secondo
next j !orizzontali #nr*(nz+1)

for j=0 to nz-1
for i=1 to nr
EDGE i+j*nr, i+nr+j*nr,-1,-1,0
next i
next j !verticali #nr*nz

Per quanto riguarda i poligoni, occorre ricordare che è diminuito il numero degli edges verticali,
per cui al secondo e terzo posto degli indici occorre ancora sostituire j*(nr+1) con j*n.
Infine l’ultimo poligono di ogni fascia orizzontale presenta un vettore in comune con il primo,
quindi va estratto dal loop per i=nr, riscrivendo il secondo indice con i=0.

In conclusione:

for j=0 to nz-1
for i=1 to nr
PGON 4, 0, -1, i+j*nr,nr*(nz+1)+i+1+j*(nr+1),-(i+nr+j*nr),-(nr*(nz+1)+i+j*(nr+1))
next i
next j

va sostituito con

for j=0 to nz-1
for i=1 to nr-1
PGON 4, 0, -1, i+j*nr, nr*(nz+1)+i+1+j*nr,  -(i+nr+j*nr),  -(nr*(nz+1)+i+j*nr)
next i
PGON 4, 0, -1,nr+j*nr,nr*(nz+1)+  1+j*nr,   -(i+nr+j*nr),  -(nr*(nz+1)+i+j*nr)
next j

Volendo poi aggiungere le basi, contornate da n vettori,
si aggiungerà allo script:

for i=1 to nr
put -(nr-i+1)
next i
PGON nr, 0, -1, get (nsp) !base inferiore, oraria

for i=1 to nr
put i+nr*nz
next i
PGON nr, 0, -1, get (nsp) !base superiore, antioraria

Per avere una superficie cilindrica deformabile a piacere,
occorre introdurre edges obliqui e spezzare i poligoni quadrilateri in due parti.
Gli edges obliqui si ottengono dagli orizzontali aggiungendo nr al secondo posto e considerandone nz insiemi invece di nz+1.
Lo script finale è il seguente:

for j=0 to nz
for i=0 to nr-1
VERT r*cos(i*360/nr), r*sin(i*360/nr), j*h/nz
next i
next j

for j=0 to nz
for i=1 to nr-1
EDGE i+j*nr, i+1+j*nr,-1,-1,0
next i
EDGE nr+j*nr, 1+j*nr,-1,-1,0
next j !orizzontali #nr*(nz+1)

for j=0 to nz-1
for i=1 to nr
EDGE i+j*nr, i+nr+j*nr,-1,-1,0
next i
next j !verticali #nr*nz

for j=0 to nz-1
for i=1 to nr-1
EDGE i+j*nr, i+1+j*nr+nr,-1,-1,0
next i
EDGE nr+j*nr, 1+j*nr+nr,-1,-1,0
next j !obliqui #nr*nz

for j=0 to nz-1
for i=1 to nr-1
material m1
PGON 3, 0, -1, i+j*nr,nr*(nz+1)+i+1+j*nr,-(i+j*nr+nr*(2*nz+1))
next i
PGON 3, 0, -1, i+j*nr,nr*(nz+1)+1+j*nr,-(i+j*nr+nr*(2*nz+1))
next j

for j=0 to nz-1
for i=1 to nr
material m2
PGON 3, 0, -1, -(i+nr+j*nr),-(nr*(nz+1)+i+j*nr),i+j*nr+nr*(2*nz+1)
next i
next j

Volendo rendere deformabili anche le basi, occorre dividerle in sottomoduli.
In questo caso lo script si complica ulteriormente.
Occorre aggiungere i vertici di cerchi concentrici posti all’interno delle basi, poi si devono costruire nuovi vettori,
formando una sorta di ragnatela.
Di fatto si costruiscono due semisfere appiattite,
per cui il procedimento è del tutto analogo alla costruzione della semisfera primitiva suddivisa in triangoli.
L’unica differenza è che la circonferenza costituita dall’equatore corrisponde al bordo del cilindro, già esistente.

Lo script comprensivo delle basi suddivise in moduli triangolari è il seguente:

Base
for j=0 to nz
for i=0 to nr-1
VERT x0+r*cos(i*360/nr),y0+r*sin(i*360/nr),z0+j*h/nz
next i
next j

for j=1 to m-1
for i=0 to nr-1
ro=r-r/m*j
x=ro*cos(360/nr*i)
y=ro*sin(360/nr*i)
Vert x0+x,y0+y,z0
next i
next j
Vert x0,y0,z0 !bottom

for j=1 to m-1
for i=0 to nr-1
ro=r-r/m*j
x=ro*cos(360/nr*i)
y=ro*sin(360/nr*i)
Vert x0+x,y0+y,z0+h
next i
next j
Vert x0,y0,z0+h !top


for j=0 to nz
for i=1 to nr-1
EDGE i+j*nr, i+1+j*nr,-1,-1,0
next i
EDGE nr+j*nr, 1+j*nr,-1,-1,0
next j !orizzontali

for j=0 to nz-1
for i=1 to nr
EDGE i+j*nr, i+nr+j*nr,-1,-1,0
next i
next j !verticali

for j=0 to nz-1
for i=1 to nr-1
EDGE i+j*nr, i+nr+j*nr+1,-1,-1,0
next i
EDGE nr+j*nr, nr+j*nr+1,-1,-1,0
next j !oblique

for j=0 to m-2 !inizio bottom
for i=1 to nr-1
EDGE i+j*nr+nr*(nz+1),  i+1+j*nr+nr*(nz+1),-1,-1,0
next i
EDGE nr+j*nr+nr*(nz+1), 1+j*nr+nr*(nz+1),-1,-1,0
next j !orizzontali bottom

for i=1 to nr
EDGE i,  i+nr*(nz+1),-1,-1,0
next i
for j=0 to m-3
for i=1 to nr
EDGE i+j*nr+nr*(nz+1),  i+j*nr+nr*(nz+1)+nr,-1,-1,0
next i
next j
for i=1 to nr
EDGE i+(m-2)*nr+nr*(nz+1), nr*m+nr*nz+1 ,-1,-1,0
next i !radiali bottom

for i=1 to nr-1
EDGE i,  i+nr*(nz+1)+1,-1,-1,0
next i
EDGE nr,  nr*(nz+1)+1,-1,-1,0
for j=0 to m-3
for i=1 to nr-1
EDGE i+j*nr+nr*(nz+1),  i+j*nr+nr*(nz+1)+nr+1,-1,-1,0
next i
EDGE nr+j*nr+nr*(nz+1),  j*nr+nr*(nz+1)+nr+1,-1,-1,0
next j  !obliqui bottom)

for j=0 to m-2 !inizio top
for i=1 to nr-1
EDGE i+j*nr+nr*m+nr*nz+1,  i+j*nr+nr*m+nr*nz+2,-1,-1,0
next i
EDGE nr+j*nr+nr*m+nr*nz+1, j*nr+nr*m+nr*nz+2,-1,-1,0
next j !orizzontali top

for i=1 to nr
EDGE i+nr*nz,  i+nr*m+nr*nz+1,-1,-1,0
next i
for j=0 to m-3
for i=1 to nr
EDGE i+j*nr+nr*m+nr*nz+1,  i+j*nr+nr*m+nr*nz+nr+1,-1,-1,0
next i
next j
for i=1 to nr
EDGE i+j*nr+nr*m+nr*nz+1, 2*nr*m+nr*nz-nr+2 ,-1,-1,0
next i !radiali top

for i=1 to nr-1
EDGE i+nr*nz,  i+nr*m+nr*nz+2,-1,-1,0
next i
EDGE nr+nr*nz,  nr*m+nr*nz+2,-1,-1,0
for j=0 to m-3
for i=1 to nr-1
EDGE i+1+j*nr+nr*m+nr*nz,  i+j*nr+nr*m+nr*nz+nr+2,-1,-1,0
next i
EDGE nr+1+j*nr+nr*m+nr*nz,  j*nr+nr*m+nr*nz+nr+2,-1,-1,0
next j  !obliqui top

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

for j=0 to nz-1
for i=1 to nr
PGON 3, 0, -1, -(i+nr+j*nr),-(nr*(nz+1)+i+j*nr),i+j*nr+nr*(2*nz+1)
next i
next j !fine sup. laterale

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

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

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

for j=1 to m-1
for i=1 to nr
PGON 3, 0, -1, 3*nr*nz+i+nr*j,-(3*nr*nz+2*nr*m+i+nr*j-nr),3*nr*nz+nr*m+i+nr*j-nr
next i
next j !fine bottom

for i=1 to nr-1
PGON 3, 0, -1, i+nr*nz,1+3*nr*nz+4*nr*m-2*nr+i,-(3*nr*nz+5*nr*m-2*nr+i) !-orizz.,obliquo,-(radiale+1)
next i
PGON 3, 0, -1, i+nr*nz,1+3*nr*nz+4*nr*m-2*nr,-(3*nr*nz+5*nr*m-2*nr+i)

for j=1 to m-2
for i=1 to nr-1
PGON 3, 0, -1, 3*nr*nz+i+nr*j+3*nr*m-2*nr,1+3*nr*nz+i+nr*j+4*nr*m-2*nr,-(3*nr*nz+5*nr*m+i+nr*j-2*nr)
next i
PGON 3, 0, -1, 3*nr*nz+nr+nr*j+3*nr*m-2*nr,1+3*nr*nz+nr*j+4*nr*m-2*nr,-(3*nr*nz+5*nr*m+nr*j-nr)
next j

j=m-1 !al centro
for i=1 to nr-1
PGON 3, 0, -1, 3*nr*nz+i+nr*j+3*nr*m-2*nr,1+3*nr*nz+nr*m+i+nr*j+3*nr*m-2*nr,-(3*nr*nz+nr*m+i+nr*j+3*nr*m-2*nr)
next i
PGON 3, 0, -1, 3*nr*nz+nr+nr*j+3*nr*m-2*nr,1+3*nr*nz+nr*m+nr*j+3*nr*m-2*nr,-(3*nr*nz+nr*m+nr+nr*j+3*nr*m-2*nr)

for j=1 to m-1
for i=1 to nr
PGON 3, 0, -1, -(3*nr*nz+i+nr*j+3*nr*m-2*nr),-(3*nr*nz+4*nr*m+i+nr*j-3*nr),3*nr*nz+5*nr*m+i+nr*j-3*nr
next i
next j !fine top

body -1

Allego gli oggetti GDL relativi al primo  e al secondo caso:
cilind modulare prim.gsm
cilind modulare prim2.gsm
Il terzo oggetto:
cilind sottomod PRIM2
presenta una suddivisione modulare differente, basata sul quadrato suddiviso da mediane e diagonali,
invece che tagliato da una sola diagonale. Di fatto si ricavano 8 sottomoduli invece di 2.
Questi oggetti possono essere utilizzati per superfici a forma di tubo deformabile a piacere.
« Ultima modifica: 17 Settembre 2012, 21:46 da marcomasetti »