Robitex's Blog

Ideas in the web

Archivi Categorie: pstricks

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.

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.

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