Robitex's Blog

Ideas in the web

Archivi Mensili: luglio 2009

Retta di Eulero: PSTricks vs PGF


Quello che non vi ho detto

Come abbiamo visto nel post precedente la retta di Eulero è la retta passante per i tre punti notevoli di un triangolo: l’ortocentro O, il baricentro G, ed il circocentro M.
Viene subito da chiedersi se tali punti al variare del triangolo possono cambiare posizione reciproca. La risposta è no. Infatti il baricentro si trova sempre tra ortocentro e circocentro, non solo, la distanza tra G ed O risulta essere doppia di quella tra G ed M.

Verifichiamolo con un disegno utilizzando questa volta PSTricks, pacchetto storico che sfrutta il linguaggio PostScript per produrre grafica in LaTeX.
Giudicate voi il vincitore nell’arena tra PSTricks e PGF, è una bella lotta!

PSTricks vs PGF

Visto che esiste, utilizziamo il pacchetto pst-eucl di PSTricks, dedicato proprio al disegno geometrico (link al manuale).

In anticipo ecco il risultato finale che potete scaricare (si tratta di un file pdf di 7KB).

Come forse saprete occorre compilare il file sorgente contenente il codice pstricks con latex e non con pdflatex, passare il dvi risultante con il driver dvips per ottenere il file postscript e se volete, convertirlo infine in pdf per esempio con ps2pdf. Per saperne di più potete consultare i due post precedenti per abbreviare questo procedimento il primo per Windows ed il secondo per Linux.

Ok. Definiamo in un attimo la struttura del file sorgente per poterci concentrare sul linguaggio di pst-eucl: di seguito riporto il codice di un semplice sorgente LaTeX per produrre i nostri test:

\documentclass[11pt,a4paper]{article}
\usepackage{pstricks}
\usepackage{pst-eucl}

\pagestyle{empty}
\begin{document}
\begin{pspicture}(10,10)

% sistemare quì il codice pstricks

\end{pspicture}
\end{document}

Disegno del triangolo

I comandi pst-eucl hanno tutti come prefisso pst seguito dal nome dell’oggetto geometrico che vogliamo costruire. Per il triangolo si usa quindi il comando \pstTriangle a cui viene passata la sequenza (x,y){nomeVertice}, per esempio così:

\pstTriangle(0,0){A}(6.5,-3.5){B}(5,6){C}

Possiamo notare un paio di differenze con PGF, la prima è che essendo un pacchetto specializzato pst-eucl propone comandi dedicati alla geometria, e la seconda che il nome assegnato al vertice diventa anche l’etichetta che viene composta già in modalità matematica. Vedremo che questo a volte risulta essere più comodo altre volte invece no, rispetto alla sintassi PGF che distingue il nome dall’etichetta.

Notate come pst-eucl cerca di fare del suo meglio per posizionare la etichette dei vertici cercando di minimizzare la necessità d’intervento manule con la regolazione dell’angolo PosAngle, una prerogativa interessante.

Disegno del baricentro

Occorre individuare il punto di mezzo di un segmento e tracciare le mediane. In pst-eucl vi sono i comandi \pstMiddleAB e \pstLineAB per farlo. Ecco il codice:

% Gravity center
\pstMiddleAB{A}{B}{C’}
\pstMiddleAB{A}{C}{B’}
\pstMiddleAB{B}{C}{A’}

\pstLineAB{A}{A’}
\pstLineAB{B}{B’}
\pstLineAB{C}{C’}

% otherwise use \pstCGravABC
\pstInterLL{A}{A’}{B}{B’}{G}

Ancora molto semplice la sintassi che presenta un novità linguistica: dopo il solito prefisso pst troviamo il nome dell’oggetto richiesto seguito da AB ad indicare che l’operazione va effettuata su un segmento. La cosa è abbastanza curiosa e se utilizziamo come abbiamo fatto noi i caratteri A e B come nomi dei vertici, il codice solleva un po’ di confusione.

L’ultimo comando “marca” il baricentro etichettandolo. Esso richiede quattro punti che definiscono le rette di cui si vuole calcolare il punto d’intersezione lineare (LL). Da notare che possiamo anche utilizzare il comando apposito \pstCGravABC di un tipo sconosciuto in PGF (non essendo dotato di librerie specializzate almeno per il momento).

Disegno dell’ortocentro

Per disegnare le altezze del triangolo occorre determinare la proiezione ortogonale di un vertice sul lato opposto. \pstProjection è il comando che fa al caso nostro. Accetta (obbligatoriamente) due punti che definiscono la retta, un terzo punto da cui effettuare la proiezione ed un argomento opzionale con il nome del punto trovato. Sinceramente non vedo a cosa possa servire non assegnare il nome a tale punto visto che in seguito non è possibile individuarlo se non lo si fa. Be, forse non è altro che la mia poca conoscenza di pst-eucl (i vostri pensieri in proposito sono ben accetti).

In definitiva ecco il codice, semplice semplice:

\pstProjection{A}{B}{C}[co]
\pstProjection{A}{C}{B}[bo]
\pstProjection{B}{C}{A}[ao]

\pstLineAB{A}{ao}
\pstLineAB{B}{bo}
\pstLineAB{C}{co}

\pstInterLL{A}{ao}{B}{bo}{O}

Disegno del circocentro

Per disegnare un asse di un segmento di cui sono noti gli estremi utilizziamo questa volta il comando \pstMediatorAB. Occorre passargli gli estremi del segmento in ordine rispetto al semipiano in cui si vuole che l’asse sia disegnato, il nome del punto di mezzo del segmento (questa volta obbligatorio), ed il nome del secondo punto che definisce il segmento d’asse (anche questa volta obbligatorio), da cui il codice:

\pstMediatorAB{A}{B}{c”}{Mc}
\pstMediatorAB{B}{C}{a”}{Ma}
\pstMediatorAB{C}{A}{b”}{Mb}

\pstInterLL{c”}{Mc}{b”}{Mb}{M}

Notate come in questo codice vengono definiti di nuovo i punti di mezzo dei lati del triangolo, solo perché il comando \pstMediatorAB prevede che tali punti devono essere obbligatoriamente definiti. Il doppione si potrebbe eliminare disegnando prima gli assi per il circocentro e poi le mediane per il baricentro, ma ritengo che questa soluzione sia un vincolo alla scrittura del codice non giustificato.

Disegno della retta di Eulero

Quì viene il bello. Dopo aver disegnato pazientemente tutti gli elementi, ecco che si propone la necessità di disegnare rette e cerchi. Nel primo caso esiste una comodissima opzione del comando \pstLineAB chiamata nodesep a cui passare un valore numerico negativo se vogliamo che la retta venga estesa di quella quantità verso l’esterno dai due punti di definizione, ed un positivo se viceversa. Nel secondo caso il comando \pstCircleOA traccia fantasticamente il cerchio con centro nel punto primo argomento passante per il punto secondo argomento. Bè se vi ricordate che in PGF per fare la stessa cosa è necessario caricare una apposita libreria aggiuntiva, goderete certamente dell’eleganza di pst-eucl. Ecco l’ultimo frammento di codice (il comando \pstSegmentMark traccia simboli di eguaglianza su segmenti):

\pstLineAB[nodesep=-2]{O}{M}
\pstCircleOA[linecolor=red]{M}{A}
\pstCircleOA[linecolor=blue]{G}{M}

\pstMiddleAB{O}{G}{K}
\pstSegmentMark{O}{K}
\pstSegmentMark{K}{G}

Bene, la retta di Eulero è servita. Come vedete è stata tracciata utilizzando i punti che sicuramente sono i più lontani (O ed M), mentre con il cerchio centrale si è mostrato la condizione geometrica della distanza di detti punti dal baricentro evidenziando con i mark a doppie barre i mutui rapporti.

Fine della storia (o forse no)

Non rimane che affinare un po’ il codice con qualche tocco di colore e modifica alle etichette ed il gioco è fatto. Consultate il manuale di pst-eucl per conoscere i dettagli delle opzioni.

\documentclass[11pt,a4paper]{article}
\usepackage{pstricks}
\usepackage{pst-eucl}

\pagestyle{empty}
\begin{document}
\begin{pspicture}(10,10)
% Triangle definition
\pstTriangle[linewidth=1.5\pslinewidth](0,0){A}(6.5,-3.5){B}(5,6){C}

% Gravity center
{
\psset{linewidth=0.5\pslinewidth,linecolor=red}
\pstMiddleAB[PosAngle=-90]{A}{B}{C’}
\pstMiddleAB{A}{C}{B’}
\pstMiddleAB[PosAngle=0]{B}{C}{A’}

\pstLineAB{A}{A’}
\pstLineAB{B}{B’}
\pstLineAB{C}{C’}
}

% othewise use \pstCGravABC
\pstInterLL[PosAngle=-30]{A}{A’}{B}{B’}{G}

% Orthocentre
{
\psset{PointSymbol=none,linewidth=0.5\pslinewidth,linecolor=orange,PointName=none}
\pstProjection{A}{B}{C}[co]
\pstProjection{A}{C}{B}[bo]
\pstProjection{B}{C}{A}[ao]

\pstLineAB{A}{ao}
\pstLineAB{B}{bo}
\pstLineAB{C}{co}
}

\pstInterLL[PosAngle=-80]{A}{ao}{B}{bo}{O}

% CircumCentre
{
\psset{PointSymbol=none,linewidth=0.5\pslinewidth,linecolor=green,PointNameA=none,PointNameB=none}
\pstMediatorAB[nodesepB=-1]{A}{B}{c”}{Mc}
\pstMediatorAB[nodesepB=1]{B}{C}{a”}{Ma}
\pstMediatorAB{C}{A}{b”}{Mb}
}

\pstInterLL[PosAngle=-40]{c”}{Mc}{b”}{Mb}{M}

% Euler Line
\pstLineAB[linecolor=blue,nodesep=-3.2,linewidth=2\pslinewidth]{O}{M}

\pstCircleOA[linecolor=red]{M}{A}

\pstCircleOA[linecolor=blue]{G}{M}

\pstMiddleAB[PosAngle=132]{O}{G}{K}
\pstSegmentMark[linecolor=blue]{O}{K}
\pstSegmentMark[linecolor=blue]{K}{G}
\pstSegmentMark[linecolor=blue]{G}{M}
\end{pspicture}
\end{document}

Alla prossima.

Annunci

Uno script bash per PSTricks


Se ho scritto nel precedente post uno script per Windows, volete che non ci provi con Linux?

Situazione

Dunque stiamo lavorando con pstricks e vorremo ottenere il file finale nel formato pdf ritagliato secondo il Bounding Box (quel rettangolo che circoscrive la figura).
I passaggi al solito sono la compilazione con latex, il passaggio al formato postscript con il driver dvips, la conversione in pdf con l’utility ps2pdf ed il ritaglio con pdfcrop. Vogliamo anche che i file intermedi vengano cancellati.

Lo script bash

La shell Bash (the GNU Bourne Again Shell) ha una lunga storia le cui origini risalgono alla nascita dei sistemi Unix negli anni 70. Uno script bash è un file di testo che viene interpretato dalla shell che ne esegue le istruzioni. Dunque apriamo un editor di testo e scriviamo per prima cosa la sha-bang ovvero i due caratteri #! seguiti dall’identificazione della shell scelta per l’esecuzione.
La prima riga sarà quindi (di solito nei sistemi Linux la shell sh viene in realtà ad essere proprio la bash che sostanzialmente è compatibile con la shell sh):

#! /bin/sh

Ora scriviamo semplicemente le istruzioni riga dopo riga che avremmo dato alla linea di comando del terminale:

#! /bin/sh
nomefile=$1

latex $nomefile.tex
dvips $nomefile.dvi
rm $nomefile.dvi
ps2pdf $nomefile.ps
rm $nomefile.ps
pdfcrop -margins 5 $nomefile.pdf $nomefile.pdf

In più c’è soltanto l’uso della variabile nomefile che assume il valore del primo argomento passato allo script $1.
Da notare che scrivere il simbolo $ davanti al nome della variabile fa espandere il suo contenuto a cui vengono aggiunti in sequenza i caratteri seguenti. Inoltre precisiamo che il comando rm opera sul file cancellandolo dal disco.

Passi finali

Salviamo il file contenente lo script dandogli il nome pstrun e assegniamogli i permessi di esecuzione con il comando chmod u+x pstrun od anche dalla scheda Permessi del dialogo Proprietà del file.
Posizioniamo lo script nella stessa cartella in cui si trova il sorgente LaTeX contenente il codice PSTricks e lanciamolo così (il nome del file da processare dovrà essere dato senza estensione):

~./pstrun nomefilesorgente

Lo script è molto semplice per la sua specificità, ma è possibile estenderlo al massimo. Aggiungendo la linea finale acroread $nomefile.pdf è per esempio possibile lanciare con Acrobat la visualizzazione del risultato, ma la maggior utilità dello script passa per l’implementazione di un serie di opzioni alla maniera classica dei comandi di shell in Linux.
Alla prossima.

Da LaTeX a PDF passando per postscript


I passaggi tradizionali per ottenere il file PDF a partire dal sorgente LaTeX consistono nella compilazione con latex, la conversione del file dvi risultante al formato postscript e finalmente la seconda conversione al pdf.
La sequenza dei comandi da impartire da finestra di comando è :

  1. latex nomefile.tex
  2. dvips nomefile.dvi
  3. ps2pdf nomefile.ps

Di solito si ottiene direttamente il pdf dal sorgente LaTeX per mezzo di pdflatex, ma a volte è necessario passare per il driver dvips per esempio se il nostro documento contiene disegni di pstricks.

Sotto Windows la procedura si può abbreviare utilizzando un file batch ovvero un file contenente istruzioni nel formato DOS con estensione .bat. Alla fine vedremo questo file batch come se fosse un comando da utilizzare così:

>lapdf nomefile

il nome del comando è una specie di contrazione della sequenza dei comandi che cominciano con latex e finiscono con il pdf, mentre l’argomento deve essere il nome del sorgente latex senza estensione.

Adesso manca solamente il contenuto del file .bat (supponiamo che sia necessario una sola compilazione LaTeX). Ecco il mini listato:

@echo off
rem compila un sorgente LaTeX
rem e compie le conversioni a pdf

set filename=%~n1

latex "%filename%.tex"
dvips "%filename%.dvi"
ps2pdf "%filename%.ps"

Per il momento il file batch si deve trovare nella stessa posizione del file sorgente, ma non è detto che lo script non possa essere reso più intelligente.

Per provare lo script copiate in un file .tex questo codice preso dalla galleria di esempi del sito di pstricks ospitato dal TUG (Tex User Group), e date il nome del file senza estensioni in pasto al nostro lapdf.

\documentclass{article}% voss 2007-02-27

\usepackage{pst-node,multido}
\SpecialCoor

\def\colA#1{\ifcase#1red\or magenta\or yellow\or cyan\or green\or blue\or gray\fi}
\def\colB#1{\ifcase#1blue\or gray\or red\or magenta\or yellow\or cyan\or green\fi}
\pagestyle{empty}

\begin{document}

\begin{pspicture}(-3,-3)(3,3)
\multido{\rA=90.0+51.429,\nA=0+1}{7}{%
\Cnode*[linecolor=\colA{\nA}](2.5;\rA){\nA2}
\Cnode*[linecolor=\colB{\nA}](1.25;\rA){\nA1}
\ncline{\nA2}{\nA1}}
\multido{\nA=0+1,\nAA=1+1,\nB=3+1,\nC=4+1}{7}{%
\ncline{\nA2}{\nAA2}\ncline{\nA1}{\nB1}\ncline{\nA1}{\nC1}}
\ncline{62}{02}
\end{pspicture}

\end{document}

Ciao.

La retta di Eulero


Cos’è la retta di Eulero

Qualche tempo fa leggendo la rubrica Il matematico impertinente di Piergiorgio Odifreddi sono venuto a conoscenza della retta di Eulero. L’articolo si trova sul numero di Maggio 2009 del mensile Le Scienze, ed è intitolato Dove i greci non arrivarono.

Il grande matematico Eulero si accorse nel 1767 che in un triangolo i tre punti notevoli baricentro, circocentro e ortocentro sono allineati. Da allora tale retta è conosciuta come la retta di Eulero. Naturalmente la retta è definita sempre tranne che per il triangolo equilatero per il quale i tre punti notevoli coincidono.

Per approfondimenti potete visitare la pagina di MathWorld, formidabile enciclopedia matematica ed il portale di Wikipedia.

Disegnare la retta di Eulero

Questa sorprendente proprietà dei triangoli euclidei, certamente non l’unica ad essere poco conosciuta proprio perché scoperta in tempi recenti e non dai greci, è un utile esercizio per completare il precedente post dal titolo Disegnare il baricentro del triangolo, utilizzando al solito il pacchetto grafico PGF in LaTeX.

Ortocentro

L’ortocentro è il punto O intersezione delle altezze del triangolo. Dato quindi un vertice del triangolo quello che serve è determinarne la proiezione normale sul lato opposto. Chiameremo Ao il punto proiezione del vertice A sulla retta per B e C. Tale punto può essere calcolato in PGF utilizzando la libreria calc: vediamone la sintassi:

Se vi ricordate, le coordinate del punto di mezzo di un segmento AB si calcolavano con la sintassi:

($(A)!0.5!(B)$)

Detto E un punto da proiettare sulla retta AB, la sintassi di calcolo prevede di inserire le coordinate di E che si esprimono tra parentesi tonde, tra punti esclamativi, dunque le coordinate della proiezione normale diventano:

($(A)!(E)!(B)$)

Applicato al caso del triangolo le altezze possono essere disegnate così:

% orthocenter
\coordinate (ao) at ($(B)!(A)!(C)$);
\coordinate (bo) at ($(A)!(B)!(C)$);
\coordinate (co) at ($(A)!(C)!(B)$);

\draw (A) -- (ao);
\draw (B) -- (bo);
\draw (C) -- (co);

Anche se è possibile accorpare la creazione del punto proiezione con il disegno dell’altezza scrivendo per esempio per il vertice A:

% compact syntax
\draw (A) -- ($(B)!(A)!(C)$) coordinate (ao);

non faremo uso di questa notazione perché meno leggibile.

Circocentro

Il circocentro, punto d’intersezione degli assi dei lati del triangolo, è il più complesso da tracciare. Con riga e compasso avremo tracciato due cerchi di raggio uguale con centro gli estremi del segmento per trovare due punti intersezione delle circonferenze appertenenti al’asse. Anche se è possibile procedere allo stesso modo con PGF, è preferibile abbreviare la strada utilizzando l’operazione di rotazione:

se M è il punto di mezzo del segmento AB allora un secondo punto dell’asse di AB è il punto che si ottiene ruotando un estremo di 90° con centro in M. In PGF la sintassi è:

($(M)!1!90:(B)$)

che significa ruota il segmento MB su M di 90° (nel verso antiorario) ed aumenta la lunghezza del segmento risultante a partire da M del fattore tra punti esclamativi.

Dunque dai punti dell’asse delle mezzerie dei lati (chiamati a, b, c nel nostro caso), trovati i punti ortogonali per rotazione possiamo tracciare gli assi, così:

% circumcenter
% a, b, c medium point
% ax, bx, cx new point on axis
\coordinate (ax) at ($(a)!1!90:(C)$);
\coordinate (bx) at ($(b)!1!90:(A)$);
\coordinate (cx) at ($(c)!1!90:(B)$);

\draw (a) -- (ax);
\draw (b) -- (bx);
\draw (c) -- (cx);

Ora sappiamo come tracciare la retta di Eulero del triangolo.

Tracciamento finale

Tenete conto che il codice completo sottostante adotta un diverso colore delle linee di costruzione dei tre punti notevoli e regola in aumento lo spessore delle linee importanti come i lati del triangolo e la retta di Eulero stessa.

Eccone il listato con sottostante risultato scaricabile nel formato PDF:

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\pagestyle{empty}
\begin{document}

\begin{tikzpicture}
% triangle
\coordinate[label=left:{$A$}]  (A) at (  0, 0  );
\coordinate[label=below:{$B$}] (B) at (  6.5,-3.5);
\coordinate[label=above:{$C$}] (C) at (5, 7);

\draw[very thick] (A) -- (B) -- (C) -- cycle;

\foreach \point in {A,B,C}
\fill [blue] (\point) circle (1.6pt);

% gravity center (centroid)
\node [fill=red,inner sep=0.8pt] (a) at ($ (C) !.5! (B) $) {};
\draw[red] (A) -- (a);
\node [fill=red,inner sep=0.8pt] (b) at ($ (A) !.5! (C) $) {};
\draw[red] (B) -- (b);
\node [fill=red,inner sep=0.8pt] (c) at ($ (A) !.5! (B) $) {};
\draw[red] (C) -- (c);

\coordinate [label=above right:{$G$}] (G) at (intersection of A--a and B--b);
\fill [red] (G) circle (2pt);

% orthocenter
\coordinate (ao) at ($(B)!(A)!(C)$);
\coordinate (bo) at ($(A)!(B)!(C)$);
\coordinate (co) at ($(A)!(C)!(B)$);

\draw[orange] (A) -- (ao);
\draw[orange] (B) -- (bo);
\draw[orange] (C) -- (co);

\coordinate [label=above:{$O$}] (O) at (intersection of A--ao and B--bo);
\fill [orange] (O) circle (2pt);

% circumcenter
\coordinate (ax) at ($(a)!1!90:(C)$);
\coordinate (bx) at ($(b)!1!90:(A)$);
\coordinate (cx) at ($(c)!1.5!90:(B)$);

\draw[green] (a) -- (ax);
\draw[green] (b) -- (bx);
\draw[green] (c) -- (cx);

\coordinate[label=below:{$M$}] (M) at (intersection of a-->ax and b--bx);
\fill [green] (M) circle (2pt);

% Euler line
\coordinate (e1) at ($(M)!1.5!(O)$);
\coordinate (e2) at ($(O)!1.5!(M)$);
\draw[very thick, blue] (e1) -- (e2);
\end{tikzpicture}

\end{document}
Euler Line

Euler Line

Curiosi per la circonferenza?

Potevamo rinunciare a tracciare la circonferenza circoscritta? Conosciamo infatti il centro che abbiamo chiamato alla fine M, e ben tre punti da cui passa, ovvero i vertici del triangolo.

Ebbene con una libreria aggiuntiva PGF da caricare nel preambolo con \usetikzlibrary{through} basta scrivere il comando:

\node (cc) at (M) [draw,circle through=(A)] {};

Ciao, ed alla prossima…

Quarant’anni fa la luna


Il nostro satellite ricevette per la prima volta la visita di esseri umani esattamente quarant’anni fa.
Fu un’impresa di metodo, di intelligenza, di collaborazione, straordinaria da cui non finiamo di cogliere insegnamenti, ipotesi per il futuro, e pensieri di meraviglia.

Rivedendo per l’ennesima volta le immagini delle passeggiate lunari, del volo in orbita, del lavoro scientifico sulla superficie della Luna, elimino dai pensieri quello che è stato di tecnologico, di ingegneristico, per trarne l’idea che quest’impresa sia essenzialmente un’impresa dell’uomo…

anzi dell’umanità, sola con la propria capacità di esprimere idee e costruire futuro per il futuro.

Riflettere non solo ricordare quell’impresa è importante: le perdite di vite umane, come era cresciuto e cosa aveva fatto in Germania Wernher von Braun, le conseguenze dell’interruzione del programma Apollo, le conseguenze sulla guerra fredda, perché adesso il futuro … siamo noi.

Ciao.

Pannello solare


Un numero praticamente bollente...

Un numero praticamente bollente...

Ebbene si, quel numero che si legge nell’immagine rappresenta la temperatura dell’acqua rilevata dal sensore dell’impianto solare installato sul tetto. Ben ottanta gradi ed è proprio vero che siamo nel mese in cui il sole è più forte.

Comunque state tranquilli, l’acqua non arriva ai rubinetti a quella temperatura poiché passa per il miscelatore termostatico… altrimenti sarebbero guai.
A risentirci.

Disegnare il baricentro del triangolo


Teoria

Il baricentro G o centro delle masse è un punto rispetto al quale è possibile ricondurre il moto di un qualunque corpo rigido. Per la figura geometrica del triangolo il baricentro si ottiene dall’intersezione delle mediane ovvero le rette passanti per un vertice ed il punto di mezzo del lato opposto.

Disegno geometrico con PGF

Vogliamo semplicemente disegnare la costruzione del baricentro geometrico di un triangolo utilizzando i tool grafici disponibili in LaTeX in particolare PGF.

Il disegno si baserà esclusivamente sulle coordinate dei vertici A, B, C del triangolo, mentre gli altri punti come le mezzerie dei lati verranno ricavati di conseguenza. Le coordinate di questi punti si inseriscono con il comando \coordinate a cui passiamo come opzione l’etichetta (il nome del vertice sarà lo stesso di quello dell’etichetta):

\coordinate[label=left:{$A$}]  (A) at (  0, 0  );
\coordinate[label=below:{$B$}] (B) at (  5,-3.2);
\coordinate[label=above:{$C$}] (C) at (3.6, 2.5);

Il disegno del triangolo è adesso molto semplice (la coordinata cycle corrisponde al punto iniziale del disegno della spezzata):

\draw (A) -- (B) -- (C) -- cycle;

Proviamo subito il risultato, al solito con un documento completo in LaTeX dal seguente contenuto.

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}
\begin{document}
\begin{tikzpicture}

\coordinate[label=left:{$A$}]  (A) at (  0, 0  );
\coordinate[label=below:{$B$}] (B) at (  5,-3.2);
\coordinate[label=above:{$C$}] (C) at (3.6, 2.5);
\draw (A) -- (B) -- (C) -- cycle;

\end{tikzpicture}
\end{document}

Adesso aggiungiamo un piccolo segno colorato di blu sui vertici del triangolo per mezzo di un compatto ciclo \foreach:

\foreach \point in {A,B,C}
\fill [blue] (\point) circle (1.6pt);

e per finire disegniamo le mediane ovvero i segmenti che dai vertici vanno nel punto di mezzo del lato opposto. Per mezzo del calcolo delle coordinate degli estremi, si indicherà la frazione numerica relativa sul segmento posta tra punti esclamativi. Per esempio le coordinate della mezzeria del lato BC saranno: (B)!0.5!(C).

Non è finita poiché la coordinata così calcolata va inserita tra simboli $ per indicare un calcolo che viene effettuato dall’apposita libreria calc che va caricata nel preambolo con \usetikzlibrary{calc}. Le mediane si disegnano in conclusione con:

\node [fill=red,inner sep=0.8pt] (a) at ($ (C) !.5! (B) $) {};
\draw (A) -- (a);
\node [fill=red,inner sep=0.8pt] (b) at ($ (A) !.5! (C) $) {};
\draw (B) -- (b);
\node [fill=red,inner sep=0.8pt] (c) at ($ (A) !.5! (B) $) {};
\draw (C) -- (c);

Passiamo all’ultimo problema: disegnare il baricentro. Non faremo altro che utilizzare il calcolo dell’intersezione di due mediane scrivendo un altro comando \coordinate:

\coordinate [label=above right:{$G$}] (G) at (intersection of A--a and B--b);
\fill [green] (G) circle (2pt);

Il risultato è il seguente:

La figura completa con il baricentro del triangolo (click per il download del file PDF)

La figura completa con il baricentro del triangolo (click per il download del file PDF)

Mentre il codice per ottenerlo è questo:

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\pagestyle{empty}

\begin{document}
\begin{tikzpicture}
\coordinate[label=left:{$A$}]  (A) at (  0, 0  );
\coordinate[label=below:{$B$}] (B) at (  5,-3.2);
\coordinate[label=above:{$C$}] (C) at (3.6, 2.5);
\draw (A) -- (B) -- (C) -- cycle;

\foreach \point in {A,B,C}
\fill [blue] (\point) circle (1.6pt);

\node [fill=red,inner sep=0.8pt] (a) at ($ (C) !.5! (B) $) {};
\draw (A) -- (a);

\node [fill=red,inner sep=0.8pt] (b) at ($ (A) !.5! (C) $) {};
\draw (B) -- (b);

\node [fill=red,inner sep=0.8pt] (c) at ($ (A) !.5! (B) $) {};
\draw (C) -- (c);

\coordinate [label=above right:{$G$}] (G) at (intersection of A--a and B--b);
\fill [green] (G) circle (2pt);
\end{tikzpicture}
\end{document}

Ciao ed alla prossima…

Un tabellone da lotteria – Parte 2


Evoluzione del linguaggio

Proseguiamo la costruzione del nostro tabellone da lotteria migliorando il codice per generare la griglia. Possiamo infatti utilizzare le capacità di scaling del disegno di TikZ per mezzo delle chiavi xscale e yscale. I fattori di scala vengono applicati ai valori delle coordinate che hanno come unità di default 1 cm.

In questo modo il punto di coordinata (18.5mm , 30.2 mm) potrà essere più semplicemente indicato con le coordinate (1 , 1) una volta impostati i giusti fattori che corrispondono alle fissate dimensioni di una cella del tabellone come determinate nel post precedente.

La creazione della griglia può quindi essere riscritta così:

\tikz[xscale=1.85,yscale=3.02]
\draw (0, 0) grid (10, 9);

Disegnare i numeri nelle celle

Novanta numeri disposti su nove righe per dieci colonne si gestirebbero molto facilmente con un doppio ciclo for nidificato, uno dei costrutti standard dei linguaggi di programmazione. Anche in PGF è disponibile proprio quello che cercavamo: il costrutto \foreach che prevede una variabile di ciclo che assumerà il set di valori di una lista tra parentesi graffe.

Ecco il codice dimostrativo che scrive su righe e colonne il numero 1 dato come argomento all’oggetto nodo:

\tikz
\foreach \y in {8,7,...,0}
\foreach \x in {0,1,...,9}
\draw (\x , \y ) node {1};

Un normale contatore LaTeX, chiamiamolo num, incrementato da 1 a 90 completerà il codice dell’intero documento:

\documentclass[a4paper]{article}
\usepackage[margin=12mm]{geometry}
\usepackage{tikz}

\pagestyle{empty}
\newcounter{num} % number lottery counter
\setcounter{num}{0}

\begin{document}
% basic PGF unit is 1 cm
\Huge\slshape\noindent
\begin{tikzpicture}[xscale=1.85,yscale=3.02]
\draw[color=gray] (0,0) grid (10,9);
\foreach \y in {8,7,...,0}
\foreach \x in {0,1,...,9}
\stepcounter{num}
\draw[xshift=0.5cm,yshift=0.78cm] (\x , \y ) node {\thenum};
\end{tikzpicture}
\end{document}

Noterete che il documento si apre regolando le dimensioni e la forma (slanted) del carattere, e aprendo un ambiente tikzpicture più comodo del comando \tikz usato finora per gli esempi.

Le coordinate (\x , \y) si riferiscono all’angolo in basso a sinistra della cella, quindi per posizionare correttamente il numero nella cella stessa ho utilizzato un xshift di 0,5cm (in asse nella cella) ed un yshift di 0.78cm ovvero una posizione più a nord rispetto al centro della cella.

Il comando \thenum non fa altro che restituire il valore del contatore numerico in testo.

Questa è la parte meno elegante del codice poiché un contatore LaTeX non fa parte della sintassi PGF, ma pensandoci bene la cosa si potrebbe modificare…

Per ora godetevi il risultato finale:

Tabellone di Lotteria

Tabellone di Lotteria

Texlive 2009 Pretesting su Ubuntu


Nota

Questa guida si riferisce alla versione TeX Live 2009 Pretesting, quindi pur rimanendo essenzialmente valida anche per la versione stabile di TeX Live 2009, riporta link non più attivi ai mirror che hanno supportato la fase beta testing della distribuzione.

Ecco come installare TeXlive2009 in Ubuntu.

Come per il post precedente, scarichiamo il file compresso d’installazione dallo stesso mirror francese.

Ora decomprimiamolo in una cartella e lanciamo da terminale il comando d’installazione

sudo ./install-tl --location http://texlive.guiling.fr/

In Linux lo script predilige come al solito un’interfaccia a caratteri non diversa da quella della versione 2008, con cui possiamo tra l’altro installare TeXLive con uno schema meno ingombrante della configurazione full, unica opzione per l’installer grafico per Windows (almeno per questa versione di pretesting).

Consiglio di attivare i symlinks ovviamente (opzione O), e di utilizzare uno schema medio giusto per contenere le dimesioni di occupazione di memora a circa 580 MB.

Nello screenshot quì sotto è visibile la schermata del terminale di ubuntu appena terminata l’installazione.

L'installazione da terminale si è appena conclusa

L'installazione da terminale si è appena conclusa

Ok. Adesso proviamo a lanciare tlmgr grafico con il comando:

tlmgr gui

ed ecco una schermata, tutto funziona evviva!

La scheda con le architetture supportate da Texlive 2009

La scheda con le architetture supportate da Texlive 2009

:

TeXLive 2009 Pretesting


Nota

Questa guida si riferisce alla versione TeX Live 2009 Pretesting, quindi pur rimanendo essenzialmente valida anche per la versione stabile di TeX Live 2009, riporta link non più attivi ai mirror che hanno supportato la fase beta testing della distribuzione.

TeXlive 2009 pre-testing

Da pochissime ore è possibile installare la nuova versione di TeXLive 2009 da questo indirizzo web del TeX User Group internazionale.

Nella sezione di Download della pagina segnalata è possibile raggiungere l’elenco dei mirror da cui è possibile scaricare i file d’installazione per le varie piattaforma supportate. Ho effettuato la procedura senza intoppi su un sistema Windows XP e le prime compilazioni di test.

Impressione positiva

Il modulo tlmgr sembra migliorato rispetto alla versione precedente ed i file binari sono tutti correttamente posizionati e pronti per le compilazioni dei sorgenti LaTeX. In più ci ritroviamo piacevolmente installato TeXworks, un nuovo editor specializzato per LaTeX nato per abbassare la soglia d’ingresso al mondo TeX da parte dei nuovi utenti.

Guida all’installazione su Windows XP

Dai mirror disponibili scegliamone uno europeo, per esempio quello francese e scarichiamo il file install-tl.zip, che scompatteremo in una cartella a piacere. A questo punto si apre una finestra di comando dos e si posiziona il prompt con il comando cd nella cartella appena creata (se la cartella si trova sul Desktop daremo un cd Desktop/install-tl).

A questo punto il comando da impartire nella finestra è:

install-tl --location http://texlive.guiling.fr/

A questo punto una wizard d’installazione elementare vi chiederà alcune informazioni dopo le quali partirà il download. Con questa wizard d’installazione non è possibile parzializzare TeXLive2009 che quindi verrà installata tutta (oltre 1GB di dati verranno copiati sul vostro hard disk con un tempo di download che si aggira intorno all’ora e mezza).

Non rimane che cominciare la sperimentazione di TeXLive2009.

Happy TeXing!

%d blogger hanno fatto clic su Mi Piace per questo: