ArsTeXnica, Numero 4, Ottobre 2007 - GuIT - Scuola Superiore Sant ...
ArsTeXnica, Numero 4, Ottobre 2007 - GuIT - Scuola Superiore Sant ...
ArsTeXnica, Numero 4, Ottobre 2007 - GuIT - Scuola Superiore Sant ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
ArsT EXnica Nº 4, <strong>Ottobre</strong> <strong>2007</strong> Illustrazioni 3D di Dinamica del Volo con Sketch e LAT EX<br />
x<br />
H0<br />
Hz<br />
O<br />
z<br />
H ′ 0<br />
Figura 7: Un’elica di asse z e passo p = tan θ.<br />
La curva di Figura 7 si otterrà con i comandi<br />
seguenti:<br />
def pO (0 ,0 ,0) def pH0 (3 ,0 ,0)<br />
def vK [0 ,0 ,1]<br />
def Helix {<br />
% parametri<br />
def nsteps 180<br />
def angle _ step (360+180)/ nsteps<br />
def pitch _ angle 10<br />
def radius |( pH 0) -( pO )|<br />
def pitch radius * ( angle _ step /57.3)<br />
* sin ( pitch _ angle )/ cos ( pitch _ angle )<br />
def tHelix rotate ( angle _step ,(0 ,0 ,0) ,[ vK ])<br />
then translate ( pitch *[ vK ])<br />
% elica<br />
sweep [ line width =2.8 pt , color = red ] {<br />
nsteps , [[ tHelix ]]<br />
} ( pH 0)<br />
% punto pieno in H0<br />
special |<br />
\ fill [ style = solid ] #1 circle (2 pt );<br />
|( pH 0)<br />
% cerchio di base , z =0<br />
def BaseCircle {<br />
sweep [ line width =1.8 pt , color =gray ,<br />
style = dashed ] {<br />
36 ,<br />
rotate (360/36 , (0 ,0 ,0) , [ vK ])<br />
} (pH 0)<br />
}<br />
% commenta per non disegnare il cerchio<br />
{ BaseCircle }<br />
}<br />
put { view (( pEye ), ( pLookAt ), [0 ,0 ,1]) } {<br />
{ Helix }<br />
}<br />
L’istruzione sweep viene utilizzata sia per disegnare<br />
l’elica che per disegnare la circonferenza tratteggiata<br />
sul piano z = 0. Per usare questo comando<br />
bisogna specificare: (i) il numero di cicli di disegno<br />
(vedi nsteps), (ii) la trasformazione da applicare<br />
all’istanza precedente per ottenerne una corrente<br />
(vedi [[tHelix]]) e (iii) un oggetto generatore,<br />
nel nostro esempio un punto (vedi (pH0) nella<br />
definizione dell’elica e di BaseCircle).<br />
Si osservi come il comando sweep sia stato utilizzato<br />
nel listato di pyramid.sk specificando una linea<br />
(vedi line(p0)(p1)) come oggetto generatore<br />
H<br />
θ<br />
y<br />
θ<br />
60<br />
ed ottenendo come risultato la superficie laterale<br />
della piramide di Figura 3.<br />
Un’ulteriore esempio di effetto grafico ottenuto<br />
per mezzo di un ciclo è costituito dalle annotazioni<br />
di Figura 7 che mostrano l’entità dell’angolo<br />
θ. Un’istruzione di sweep viene qui utilizzata per<br />
disegnare gli archi di circonferenza che terminano<br />
con una freccia. Se si considera, ad esempio, il<br />
punto H0, per applicare correttamente il comando<br />
sweep va definito un punto H ′ 0 lungo la retta<br />
orizzontale uscente da H0. Il punto H ′ 0 diventa il<br />
punto generatore dello sweep e viene trasformato<br />
nel punto H ′′<br />
0 , appartenente alla tangente all’elica<br />
passante per H0. In linguaggio Sketch si scriverà:<br />
% vettore lungo il raggio<br />
def vR0 unit ( ( pH 0) -( pO) )<br />
% vettore orizzontale<br />
def vH0 unit ( [ vR 0]*[ vK] )<br />
% punto H ′<br />
0<br />
def pH 01 ( pH 0)+3*[ vH 0]<br />
def tH 02 rotate ( pitch _ angle ,( pH 01) ,[ vR 0])<br />
% punto H ′′<br />
0 lungo la tangente all ’ elica<br />
def pH 02 [[ tH 02]]*( pH 01)<br />
% arco<br />
sweep [ line width =1.8 pt , color =blue ,<br />
style = solid , arrows = - >]{<br />
4,<br />
}( pH 01)<br />
rotate ( pitch _ angle /4 ,( pH 0) ,[ vR 0])<br />
% linee e punti con Tikz<br />
special |<br />
\ draw [-, solid , line width =0.8 pt ]#1 -- #2;<br />
\ fill [ style = solid ] #1 circle (2 pt );<br />
\ fill [ style = solid ] #2 circle (2 pt );<br />
\ fill [ style = solid ] #3 circle (2 pt );<br />
\ draw [-, solid , line<br />
|( pH 0)( pH 01)( pH 02)<br />
width =0.8 pt ]#1 -- #3;<br />
% simbolo θ con Tikz<br />
special |<br />
\ path [ line width =0 pt ]#1<br />
to node [ node distance =0pt , pos =0.4 ,<br />
pin ={[ pin distance =24 pt ,<br />
pin edge ={ bend left ,blue , thick }]<br />
-45:$\ theta$}]{} #2;<br />
|( pH 01)( pH 02)<br />
Per un punto H qualsiasi lungo l’elica, l’effetto voluto<br />
viene realizzato potendo comodamente ottenere<br />
in Sketch un vettore dal prodotto vettoriale<br />
di altri due. Si costruiranno: un punto H ′ staccandolo<br />
lungo una retta orizzontale uscente da H<br />
e normale al raggio locale, ed un punto Hz proiettando<br />
H sull’asse. Osservando che i due vettori<br />
H −Hz ed (H ′ −H)× ⃗ k sono paralleli, si potrà definire<br />
un vettore da utilizzare nell’istruzione sweep<br />
come asse di rotazione. Tale operazione avrà come<br />
centro il punto H e come punto generatore il<br />
punto H ′ . L’effetto grafico voluto è mostrato in<br />
Figura 7.<br />
4 Uso avanzato di Sketch<br />
Le caratteristiche del linguaggio di composizione<br />
di una scena messe a disposizione da Sketch sono<br />
tali da poter dire che le illustrazioni tridimensionali<br />
con esso ottenibili sono di fatto delle illustrazioni<br />
avanzate.<br />
La possibilità di costruire delle superfici dello<br />
spazio come reticolati, cioè come insiemi di tasselli