allegato

Transcript

allegato
1
Spirale piana
Si ottiene sottoponendo il punto (1, 0) ad una rotazione di angolo u intorno
all’origine e ad una trasformazione di scala uniforme in x e y con parametro
d
R + 2π
u, dove R è il raggio interno e d è la distanza tra due volute successive:
c(u) =
d
u
0
R + 2π
d
u
0
R + 2π
Ovvero:
c(u) =
R+
d
u
2π
cos u
sin u
cos u
− sin u
cos u
R+
d
u
2π
1
0
sin u
0 ≤ u ≤ 2nπ
e, nella notazione funzionale senza variabili:
d
d
id) cos (R + 2π
id) sin
c = (R + 2π
In PLaSM possiamo scrivere:
Script 1.1 (Spirale piana)
DEF intervals (a::isRealPos)(n::isIntPos) = (QUOTE ∼ #:n):(a/n);
DEF spiral (radius,d::isRealPos) = [ rad * COS, rad * SIN ] ∼ S1
WHERE
rad = K:radius + K:(d/(2*PI)) * ID
END;
DEF out = MAP:(spiral:<3,0.5>):(intervals:(4*PI):200);
loadlib:’flash’;
flash:out:400:’out.swf’
Otteniamo il risultato in figura, generato usando un browser contenente il
plug-in Flash o Shockwave.
Figure 1: (a) Spirale piana in formato Flash visualizzata da Internet Explorer
(b) Spirale elicoidale in formato VRML
1
2
Spirale elicoidale
Se aggiungiamo una componente di traslazione parametrica in direzione z, dove
h rappresenta la differenza di quota tra due volute successive, otteniamo una
spirale elicoidale:
  

d
0
u cos u
R + 2π
d
c(u) =  R + 2π
u sin u  +  0 
h
0
2π u
Ovvero:
c(u) =
R+
d
u
2π
R+
cos u
d
u
2π
sin u
h
u
2π
T
In PLaSM:
Script 2.1 (Spirale elicoidale (1))
DEF spiralhelix (radius,d,h::isRealPos) = [ rad * COS, rad * SIN, z ] ∼ S1
WHERE
rad = K:radius + K:(d/(2*PI)) * ID,
z = K:(h/(2*PI)) * ID
END;
DEF out = MAP:(spiralhelix<3,1,2>):(intervals:(4*PI):200);
export:out:’out.wrl’
3
Superficie rigata tra due spirali elicoidali
Riscriviamo la funzione precedente in modo tale da generare una sequenza di
funzioni coordinate, e non un’unica funzione vettoriale:
Script 3.1 (Spirale elicoidale (2))
DEF spiralhelix (radius,d,h::isRealPos) = < rad * COS ∼ S1, rad * SIN ∼ S1, z >
WHERE
rad = K:radius + K:(d/(2*PI)) * S1,
z = K:(h/(2*PI)) * S1
END;
In questo caso, per generare l’immagine della curva, dovremo scrivere:
MAP:(CONS:(spiralhelix<3,1,2>)):(intervals:(4*PI):200);
2
4
Superficie con generatrici cilindriche
Generiamo la superficie utilizzaando l’implementazione trasfinita delle curve
(superfici, etc.) di Bézier. In particolare:
1. generiamo la sequenza delle funzioni coordinate di una prima curva c1;
2. generiamo una seconda curva c2 traslando verso l’alto la prima. Si noti
che la somma di vettori agisce sia sui vettori di numeri che sui vettori di
funzioni (!);
3. generiamo le funzioni coordinate della superficie voluta come combinazione
di Bèzier delle due curve;
4. mappiamo la funzione vettoriale risultante su una opportuna decomposizione di un dominio bidimensionale.
Script 4.1 (Superficie elicoidale cilindrica)
loadlib:’beziergen’;
loadlib:’colors’;
% Bezier transfinito
%
% Esportazione di qualita‘ %
DEF vectSum = AA:+ ∼ TRANS;
DEF c1 = spiralhelix<3,1,2>;
DEF c2 = c1 vectSum <K:0, K:0, K:1>;
DEF sup = Bezier:S2:< c1, c2 >;
DEF out = MAP:(CONS: sup):(intervals:(4*PI):100 * intervals:1:1);
export:out:’out.wrl’;
export:(out CREASE (PI/2)):’out.wrl’;
Nota bene: non tutti i browser VRML eseguono lo shading di Gouraud. Ad
esempio esso è eseguito da Cosmo Player, ma non da Cortona.
Figure 2: Superficie elicoidale con generatrici cilindriche. (a) shading flat ; (b)
shading di Gouraud.
3
Figure 3: Doppia superficie elicoidale con generatrici orizzontali e verticali. (a)
Superfici; (b) solidi sottili
Script 4.2 (Doppia superficie elicoidale)
DEF c0 = spiralhelix:<1,0,2>;
DEF c1 = spiralhelix:<3,1,2>;
DEF c2 = c1 vectSum <K:0, K:0, K:1>;
DEF sup0 = Bezier:S2:< c0, c1 >;
DEF sup1 = Bezier:S2:< c1, c2 >;
DEF dom = intervals:(4*PI):100 * intervals:1:1;
DEF out = STRUCT:< MAP:(CONS: sup0):dom, MAP:(CONS: sup1):dom >;
export:(out CREASE (PI/4)):’out.wrl’
4.1
Esperimenti
Si propone di generare un modello simile, ma con la superficie laterale appartenente ad una superficie conica. Si provi infine a rendere solido il modello,
utilizzando ancora la mappa di Bézier transfinita.
Suggerimento È sufficiente generare la curva C2 con un raggio superiore a
quello di C1.
Suggerimento Si indaghi la strada alternativa di generare la superficie laterale come una superficie ritagliata (eseguendo delle sottrazioni booleane sul
dominio di una superficie conica).
Suggerimento Una espressione del tipo
bezier:S3:< surf1, surf2 >
dove surf1 e surf2 sono mappe di superficie, genera una mappa di volume.
4