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.