«

»

Gen 03

Stampa Articolo

Sketch, programma per disegnare solidi

Sketch è un piccolo programma che permette di realizzare disegni nello spazio tridimensionale. La scena 3D viene descritta da un semplice linguaggio di programmazione, che converte le istruzioni in linguaggio PSTrick o Tikz.
Con un compilatore LaTex è poi possibile convertire il tutto in un’immagine vettoriale di qualità.

L’ho utilizzato per disegnare il dodecaedro rombico, già realizzato con Geogebra, partendo dalle coordinate dei vertici e dalla definizione delle facce.

Il seguente frammento di codice definisce il dodecaedro rombico nel linguaggio utilizzato da Sketch

% Definizione del dodecaedro rombico

def rombododecaedro {
%vertici
def p1 (-sqrt(2/3),-sqrt(2/3),0)
def p2 (-sqrt(2/3),0,-sqrt(1/3))
def p3 (-sqrt(2/3),0,sqrt(1/3))
def p4 (-sqrt(2/3),sqrt(2/3),0)
def p5 (0,-sqrt(2/3),-sqrt(1/3))
def p6 (0,-sqrt(2/3),sqrt(1/3))
def p7 (0,0,-2/sqrt(3))
def p8 (0,0,2/sqrt(3))
def p9 (0,sqrt(2/3),-sqrt(1/3))
def p10 (0,sqrt(2/3),sqrt(1/3))
def p11 (sqrt(2/3),-sqrt(2/3),0)
def p12 (sqrt(2/3),0,-sqrt(1/3))
def p13 (sqrt(2/3),0,sqrt(1/3))
def p14 (sqrt(2/3),sqrt(2/3),0)
%facce
polygon[fill=lightgray](p2)(p1)(p3)(p4)
polygon[fill=lightgray](p1)(p2)(p7)(p5)
polygon[fill=lightgray](p6)(p8)(p3)(p1)
polygon[fill=lightgray](p2)(p4)(p9)(p7)
polygon[fill=lightgray](p8)(p10)(p4)(p3)
polygon[fill=lightgray](p11)(p6)(p1)(p5)
polygon[fill=lightgray](p9)(p4)(p10)(p14)
polygon[fill=lightgray](p5)(p7)(p12)(p11)
polygon[fill=lightgray](p11)(p13)(p8)(p6)
polygon[fill=lightgray](p7)(p9)(p14)(p12)
polygon[fill=lightgray](p13)(p14)(p10)(p8)
polygon[fill=lightgray](p14)(p13)(p11)(p12)
}

%Posiziona il dodecaedro

put {rotate(30,(0,0,0),[1,1,0.6])} {rombododecaedro}
global { language tikz }

Le prime righe definiscono i vertici e le facce del dodecaedro. Il solido viene quindi disegnato dopo averlo fatto ruotare di 30° attorno alla retta definita dal vettore di componenti (1,1,0.6). L’output di Sketch è il seguente codice (in linguaggio Tikz, modificato solo per accentuare l’effetto della luce sul solido)

% Sketch output, version 0.2 (build 187d, Thu Dec 23 21:35:56 2010)
% Output language: PGF/TikZ,LaTeX
\begin{tikzpicture}[line join=round]
\filldraw[fill=lightgray,semitransparent](-.094,-.585)--(-.415,.336)--(.546,.374)--(.867,-.548)--cycle;
\filldraw[fill=lightgray,semitransparent](-.415,.336)--(-.321,.922)--(.64,.959)--(.546,.374)--cycle;
\filldraw[fill=lightgray,semitransparent](-.961,-.038)--(-.867,.548)--(-.321,.922)--(-.415,.336)--cycle;
\filldraw[fill=lightgray,semitransparent](-.64,-.959)--(-.961,-.038)--(-.415,.336)--(-.094,-.585)--cycle;
\filldraw[fill=lightgray,semitransparent](.867,-.548)--(.321,-.922)--(-.64,-.959)--(-.094,-.585)--cycle;
\filldraw[fill=lightgray,semitransparent](.64,.959)--(.961,.038)--(.867,-.548)--(.546,.374)--cycle;
\filldraw[fill=black,semitransparent](.867,-.548)--(.961,.038)--(.415,-.336)--(.321,-.922)--cycle;
\filldraw[fill=lightgray!30,semitransparent](-.961,-.038)--(-.64,-.959)--(-.546,-.374)--(-.867,.548)--cycle;
\filldraw[fill=gray!20,semitransparent](-.321,.922)--(-.867,.548)--(.094,.585)--(.64,.959)--cycle;
\filldraw[fill=black!70,semitransparent](.321,-.922)--(.415,-.336)--(-.546,-.374)--(-.64,-.959)--cycle;
\filldraw[fill=gray,semitransparent](.961,.038)--(.64,.959)--(.094,.585)--(.415,-.336)--cycle;
\filldraw[fill=lightgray,semitransparent](.415,-.336)--(.094,.585)--(-.867,.548)--(-.546,-.374)--cycle;
\end{tikzpicture}% End sketch output

Ed ecco il risultato finale, dopo la compilazione LaTex

{lang: 'it'}

Permalink link a questo articolo: http://www.mateblog.it/sketch-programma-per-disegnare-solidi/

Rispondi