Robitex's Blog

Ideas in the web

Una scacchiera per PGF


Senza nulla togliere ai pacchetti LaTeX dedicati agli scacchi, vorremmo disegnare una scacchiera con il pacchetto grafico PGF, giusto per metterne alla prova la sintassi.

Devo dire che il pacchetto di Till Tantau passa a pieni voti il test…

chessboard

chessboard

Ripasso dei comandi

Innanzi tutto ricordiamo che per disegnare un quadrato in PGF occorre fornire le coordinate del vertice in basso a sinistra e quelle del vertice in alto a destra, cosa piuttosto naturale, dunque per disegnare il primo quadrato della scacchiera (che deve essere scuro) basta dare il comando:

\tikz\draw (0,0) rectangle (1,1);

Ricordiamo che se non sono specificate unità di misura viene assunto il centimetro come default, e che se vogliamo riempire il quadrato è sufficiente utilizzare il comando \filldraw (ricordatevi dei punti e virgola finali previsti alla fine dei comandi da PGF).

A questo punto la soluzione migliore che mi è venuta in mente è quella di un triplo ciclo \foreach, uno interno all’altro, per il disegno in senso orizzontale dei quattro case neri, in senso verticale ed in senso diagonale.

I tre cicli nidificati

Ecco il primo ciclo che disegna i quattro case della prima fila orizzontale:

\tikz\foreach \x in {0,2,4,6}
\filldraw (\x,0) rectangle (\x+1,1);

Come potete notare i quadrati hanno lato unitario, e le coordinate del secondo vertice sono ricavate utilizzando l’operazione matematica di somma. Abbiamo quindi a disposizione un costrutto degno di un linguaggio di programmazione di alto livello.

Per sviluppare anche in verticale i quadrati nidifichiamo il primo ciclo in un secondo aggiornando le variabili nel comando \filldraw:

\tikz
\foreach \y in {0,2,4,6}
\foreach \x in {0,2,4,6}
\filldraw (\x,\y) rectangle (\x+1,\y+1);

La cosa sta diventando interessante, specie se aggiungiamo il terzo ciclo che fa uso di una notevole opzione che possiamo passare ai comandi di disegno: la traslazione tramite un vettore di spostamento. Infatti se osserviamo i case della scacchiera costruiti finora, la seconda metà non è altro che la prima traslata di 1 in orizzontale ed 1 in verticale ovvero del vettore (1,1). Benissimo. Basta dunque far disegnare i case con uno spostamento (0,0) una volta ed una seconda volta con uno spostamento di (1,1). La chiave da dare è chiamata shift:

\tikz
\foreach \d in {0,1}
\foreach \y in {0,2,4,6}
\foreach \x in {0,2,4,6}
\filldraw[shift={(\d,\d)}] (\x,\y) rectangle (\x+1,\y+1);

Basta adesso aggiungere una griglia e diminuire un poco le dimensioni dei quadrati per ottenere il codice finale e completo, pronto da compilare con pdflatex:

\documentclass[a4paper]{article}

\usepackage{tikz}
\pagestyle{empty}

\begin{document}
   \begin{tikzpicture}
      \draw (0,0) grid (8,8);
      \foreach \d in {0,1}
         \foreach \y in {0.04,2.04,4.04,6.04}
             \foreach \x in {0.04,2.04,4.04,6.04}
                  \filldraw[shift={(\d,\d)}] (\x,\y) rectangle (\x+0.92,\y+0.92);
   \end{tikzpicture}
\end{document}

Click for download pdf document of chessboard.

Ciao, alla prossima.

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: