Robitex's Blog

Ideas in the web

Archivi Mensili: agosto 2009

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.

Uscita in canoa


Una bella uscita in canoa, con una leggera brezza di terra ed un mare assolutamente perfetto.
Nella foto eccoci affrontare lo sbarco del rientro a riva. Certo non una grande impresa della navigazione, ma un tranquilla attività litoranea tra gabbiani, grosse meduse ed il panorama visto una volta tanto dal mare.

Al rientro dalla navigazione

Al rientro dalla navigazione

Modelli in Gnome


Quel desolato menù

Gnome Context menù

Gnome Context menù

Come mostra lo screenshot, con un click destro su Desktop di Gnome è possibile creare al volo dei file vuoti. Ho sempre rimandato la soluzione a questo problema, ovvero come arricchire il menù contestuale del Desktop Environment per creare al volo i file che servono. Evidentemente ho trovato il tempo ed il modo per farlo.

Quel ricco menù alla voce “Crea documento”

Rich Gnome Context menù

Rich Gnome Context menù

Ebbene gli utenti Gnome (penso anche quelli KDE) possono non solo creare al volo file di un certo tipo, ma possono scegliere di creare particolari file per uno stesso tipo addirittura organizzati in sottomenù e farlo è estremamente facile.

Come mostra il secondo screenshot, adesso la voce “Crea documenti” può dar vita a file di parecchi tipi.

I modelli

Il concetto di applicazione immediata su cui si basa questa feature è quello di modello, ovvero un file definito dall’utente.

Basta aprire la cartella ~Modelli (nella propria home directory), e copiarvi i file di nostro interesse e per esempio, organizzarli in sotto directory, magari dall’icona opportuna.
Una volta scelta la voce corrispondente al modello che interessa, il sistema provvede ad effettuarne una copia esatta nella posizione in cui si è aperto il menù contestuale (sul Desktop o all’interno di un area libera di una finestra)
Il nome della cartella Modelli, varia a seconda della lingua per cui è configurato Gnome, per esempio, per l’inglese tale nome diventa ~Templates.

Utilità per gli utilizzatori di LaTeX

Questa utilità basata su file modello è utilissima specie per gli utilizzatori di LaTeX perché rende immediato creare un file sorgente già predisposto per un uso particolare, rimanendo indipendenti dalle analoghe funzionalità degli editor specializzati per LaTeX e senza dover ricorrere a copia incolla da un eventuale directory di sorgenti.
Anzi, in questo caso basta copiare queste directory in ~Modelli per ritrovare tutti questi file disponibili a portata di click.

Alla prossima. Ciao.

Da una lista un elenco puntato


Programmare il sistema TeX richiede conoscenze prodotte da molte sessioni di lavoro ed una dose notevole di pazienza e passione per scoprirne i meccanismi ideati dal nostro Donald Knuth. Per fortuna su CTAN il repository internazionale della community, si trovano alcuni pacchetti che forniscono un interfaccia di più alto livello verso TeX, da utilizzare in LaTeX.

Il pacchetto etextools

Questo pacchetto di Florent Chervet tuttora in fase di evoluzione, inspirato da un lavoro di Philipp Lehman, contiene in particolare alcune macro per gestire le liste, ovvero stringhe di testo separate da un carattere particolare come la virgola o il punto e virgola, come per esempio il seguente: {one,two,three,four,five,six and seven,etc}.

Bene, ecco come si può iterare in LaTeX una lista, per esempio per stamparne semplicemente ciascun item su una singola riga. Innanzi tutto occorre dichiarare un list parser con tanto di carattere separatore:

\DeclareCmdListParser{\mylistparser}{,}

e poi definire un comando che elabora l’elemento della lista uno dopo l’altro:

\newcommand{\dowithelem}[1]{\noindent#1\\}

infine richiamare la lista fornendo il nostro comando come opzione:

\mylistparser[\dowithelem]{one,two,three,four,five,six and seven}

Il risultato lo potete tranquillamente controllare in questo file pdf scaricabile (23 KB).

Da una lista ad un elenco puntato

Ed eccoci al titolo del post: vogliamo un comando che accetti una lista in input e restituisca l’elenco puntato dei suoi elementi. Il comando si chiamerà \doitemize e la sua implementazione sarà simile a quella vista precedentemente. Questa volta il comando di elaborazione inserirà un token \item prima dell’elemento, naturalmente all’interno di un ambiente itemize standard.

% nuovo list parser e cmd di elaborazione elemento
\DeclareCmdListParser{\mylistparser}{;}
\newcommand{\dowithelem}[1]{\item #1}

%
\newcommand{\doitemize}[1]{%
\begin{itemize}
\mylistparser[\dowithelem]{#1}
\end{itemize}}

abbiamo cambiato il carattere separatore in un punto e virgola perché la virgola è più frequente che sia un normale carattere del singolo elemento d’elenco. Per il resto il codice si spiega abbastanza bene da solo. Occorre solo fare un po’ di conoscenza con una sintassi forse un po’ troppo implicita, riguardante i list parser del pacchetto citato.

Come al solito ecco il pdf da consultare con calma (dimensione 24 KB).

Ma se volessimo…

Se volessimo che fosse aggiunto un punto e virgola alla fine di ogni elemento dell’elenco ed un punto alla fine dell’ultimo elemento come potremo adattare il codice già scritto?
La risposta non è facilissima, occorre pensarci un po’ su.

La mia soluzione è questa: creare una macro inizialmente vuota ed inserirla prima del comando \item, poi ridefinirla all’interno del loop in un punto e virgola: ecco il codice.

\usepackage{etextools}

\DeclareCmdListParser{\mylistparser}{;}
\newcommand{\sep}{}
\newcommand{\dowithelem}[1]{%
\sep\item #1%
\renewcommand{\sep}{;}}

\newcommand{\doitemize}[1]{
\begin{itemize}
\mylistparser[\dowithelem]{#1}.
\end{itemize}
}

Nel documento il comando si userà così:

\doitemize{uno;due;tre;quattro;cinque;sei;sette;otto}

Il trucco sta nel sistemare un punto al termine del ciclo di elaborazione della lista fatto da \mylistparser, ed unire un punto e virgola prima del \item successivo, carattere che si unirà quindi all’item precedente.
La cosa un po’ meno elegante è che se la lista è più lunga di due elementi avverrà una ridefinizione del comando \sep inutilmente.
Questo è il risultato finale da scaricare (30KB).

Ciao ed alla prossima (Please, if you want, leave a comment on coding issues. Thanks ).

Coordinate del baricentro del triangolo


La medaglia geometrica

Con l’ausilio della geometria analitica si dimostra che il baricentro del triangolo è il punto intersezione delle mediane e che il baricentro suddivide il segmento di mediana con un rapporto 2:1.

Con questo risultato è piuttosto facile determinare le coordinate del baricentro in funzione di quelle dei vertici del triangolo. Tuttavia, una volta esaminato il concetto di momento statico (vedi questo post) è naturale volerlo impiegare per ricavare direttamente le coordinate di G.

Seguendo questa via, complicata solo dal punto di vista del calcolo, si può apprezzare l’eleganza e la bellezza della procedura analitica quasi a voler dimostrare che l’idea cartesiana e quella euclidea siano le facce di una stessa medaglia.

Le tappe della dimostrazione

Calcolare gli integrali doppi dei momenti statici relativi ad un triangolo è la via diretta ma non la più conveniente per il calcolo. Decidiamo quindi una variazione di strategia calcolando dapprima i momenti statici di un triangolo rettangolo con i cateti paralleli agli assi cartesiani e poi calcolando per i tre lati del triangolo generico i baricentri dei trapezi sottesi ai lati con gli assi coordinati.

Indicando con ( x_i,y_i ) con i= 1,2,3 le coordinate dei vertici del triangolo il risultato finale sarà naturalmente:

\displaystyle x_G = \frac{x_1+x_2+x_3}{3}

\displaystyle y_G = \frac{y_1+y_2+y_3}{3}

e questo giustifica da solo le dimostrazioni di eleganza del lato cartesiano della geometria: la semplicità della media dei valori delle coordinate.

Momenti statici e triangolo rettangolo

L’integrale del momento statico riferito all’asse x è analogo a quello y pertanto svilupperemo i calcoli solo per il primo asse coordinato.

Dunque S_y=\int_A y\, dA = \frac{b h^2}{6} dove b è la misura della base lungo x ed h è la misura dell’altro cateto. Dividendo tale valore per l’area del triangolo si trova che la distanza del baricentro dall’asse x vale h/3.

Momenti statici e triangolo generico

Consideriamo il trapezio formato da un lato del triangolo, dalla sua proiezione sull’asse x di lunghezza b e dai segmenti verticali di misura h_1 ed h_2 passanti per gli estremi di detti segmenti.

Il momento statico di detto trapezio suddiviso nel triangolo rettangolo e nel sottostante rettangolo vale:

\displaystyle S_y=\frac{b}{6} \cdot (h_1^2 + h_1 h_2 + h_2^2).

Sommando i contributi con segno dei momenti statici di questi trapezi e dividendo per l’area della figura troviamo il risultato indicato in apertura.
Anche quì la simmetria delle espressioni va di pari passo con la simmetria degli oggetti geometrici…

Il dettaglio dei passaggi sono riportati in questo documento: Triangle centroid coordinate in formato PDF (composto con LaTeX). Vi lascio il compito di dimostrare che le coordinate del baricentro soddisfano l’equazione della retta mediana.

Buona lettura.

Disegni AutoCAD nel formato PDF passando per Postscript


Vi descrivo la procedura classica per ottenere un disegno AutoCAD nel formato PDF. Probabilmente state pensando che una guida del genere sia inutile o perché la vostra versione di AutoCAD esporta nativamente in PDF, oppure perché già lo fate con un driver PDF di stampante virtuale tipo CutePDF. Allora fine del discorso.

Niente affatto. Per ottenere un buon PDF di una tavola di stampa dello spazio carta è possibile ricorrere ad un formato di tutto rispetto: Postscript, e rimediare ai difettucci del driver utilizzato finora o semplicemente alla non disponibilità di una versione recente di AutoCAD (la politica degli aggiornamenti di Autodesk non è molto favorevole ai piccoli utenti, piccoli nel senso di dimensioni dello studio non certo in relazione alla professionalità).

Passo 1 – Installare un plotter virtuale Postscript

Per AutoCAD LT 2004 la procedura è qui descritta:

  1. avviare la wizard Strumenti > Autocomposizioni > Aggiungi plotter
  2. scegliere “Questo computer” e click su Avanti >
  3. tra i driver del produttore “Adobe” selezionare “PostScript Level 2”
  4. click su Avanti > ed ancora Avanti >
  5. scegliere il radio button “Stampa su file” e click su Avanti >
  6. scegliere un nome (“PostScript Level 2” va benissimo) ed Avanti >
  7. click su Fine >

Passo 2 – Configurare il plotter

Edit Plotter Configuration Dialog

Edit Plotter Configuration Dialog

Attivare il dialogo (che vedete nell’immagine sopra) “Editor di configurazione…” (da AutoCAD File -> Gestione Plotter… , doppio click sull’icona del plotter appena installato dal nome “PostScript Level 2.pc3” tra quelle della finestra di Explorer).
Nella terza scheda “Impostazioni dispositivi e documenti” aprire la struttura ad albero Grafica -> Grafica Vettoriale ed aumentare la risoluzione da 300 x 300dpi (default) a 1270 x 1270 dpi (o superiore se preferite).
Poi Proprietà Personalizzate -> click sul bottone <Personalizza Proprietà…> , disabilitate l’opzione “Includi anteprima WMF”. OK.

Passo 3 – Stampare con il nuovo plotter Postscript

A questo punto create delle stampe da spazio modello o meglio da spazio carta utilizzando il plotter “PostScript Level 2.pc3”. Naturalmente non vi dimenticate di consultare il libro di un certo Autore Lo Spazio Carta di AutoCAD per moltiplicare giusto un po’ la produttività del disegno (si certo lo spazio carta migliora l’organizzazione del disegno razionalizzandolo oltre che migliorare la qualità delle stampe).

A questo punto dovreste aver creato il file nel formato Encapsulated PostScript in una qualche cartella diciamo mydir.

Passo 4 – Produrre il PDF

Per trasformate il file risultante dal formato eps al formato PDF basta lanciare l’utility ps2pdf da riga di comando. Questa utility è compresa con il programma Ghostscript, installatelo se non l’avete, sempre l’ultima versione disponibile naturalmente.

  1. Pulsante Start > Esegui…
  2. nella casella di testo digitare cmd e quindi dare un invio
  3. nella finestra di comando che si è avviata spostarsi nella directory mydir con il comando >cd pathtomydir\mydir (naturalmente pathtomydir è il percorso della cartella)
  4. dare il comando >ps2pdf -sPAPERSIZE#a0 nomedisegno.eps (se il formato originale del disegno è A4 non occorre specificare l’opzione -sPAPERSIZE, diversamente cambiatela in a1, a2, ecc con la a minuscola mi raccomando, mentre se il nome del disegno contiene caratteri spazio racchiudetelo tra doppi apici “”).

Benissimo. Il disegno PDF è pronto, ma se vogliamo proprio ricercare la finezza possiamo scontornarlo. Certo, un disegno PDF con i margini perfetti sul rettangolo di squadratura.

Per farlo rivolgiamoci allo script Perl pdfcrop di Heiko Oberdiek. Per installarlo sul sistema la via più semplice è quella di installare TeX Live 2008 o la 2009 quando sarà rilasciata. Così facendo vi ritrovate sul sistema bella pronta anche Ghostscript, un visualizzatore Postscript, con tanto di percorsi agli eseguibili già settati (con TeX Live potrete così sperimentare anche LaTeX).

Detto questo, il comando da dare alla riga di comando è:

>pdfcrop -margins=10 nomedisegno.pdf

Fatto. Non mi rimane che augurarvi (anche se siamo ad Agosto) Buon Lavoro!!!

Significato fisico del momento statico


Scarica il post come documento PDF per la stampa

Il significato dimenticato

A volte alcuni concetti matematici vengono studiati e poi ripetutamente applicati per la risoluzione di importanti problemi tecnici. Il concetto di baricentro per esempio, è essenziale nel calcolo di progetto di una trave di un ponte, tuttavia ciò facendo si può perdere la consapevolezza del significato fisico originario di baricentro ovvero di momento statico.

Calcoliamo il momento statico di una figura scomponendola in figure elementari per ottenerne il centro di massa complessivo, senza chiederci cosa sia. In questo post vogliamo porre rimedio a questa potenziale lacuna…

Definizione geometrica di momento statico

Il momento statico o momento del primo ordine di una figura dal dominio V, con riferimento ad un piano \gamma, è l’integrale:

\displaystyle S_\gamma=\int_V h_\gamma \, dV.

dove h_\gamma è la distanza ortogonale con segno del punto della figura dal piano \gamma. In sostanza si tratta del prodotto di un volume per la sua distanza dal piano di riferimento.

Momento statico e sistema di masse puntiformi

Per un sistema di masse puntiformi m_1, m_2, \dots, m_k il momento statico rispetto ad un piano \gamma è la somma dei prodotti delle masse per la rispettiva distanza h_i dal piano considerato. In formule:

\displaystyle S_\gamma = \sum_i^k m_i h_i.

Dividendo il momento statico per la massa totale del sistema si ottiene la distanza del baricentro da quel piano \gamma, quindi se si considerano tre piani a due a due non paralleli si determina la posizione del baricentro del sistema di masse dalla loro intersezione.

Sistemi equivalenti

Due sistemi vettoriali sono equivalenti se hanno la stessa somma (risultante) e se rispetto ad un polo, hanno lo stesso momento.

Per capire quale sia il significato fisico del momento statico, introduciamo un sistema di vettori paralleli \boldsymbol{v_i} applicati nei punti P_i, e ricerchiamone un secondo sistema equivalente composto da un unico vettore. Indichiamo anche con \boldsymbol{u} il versore relativo alla direzione dei vettori, quindi tale che \boldsymbol{v_i}= m_i \boldsymbol{u}, dove lo scalare m_i è appunto la componente vettoriale.

La risultante, somma dei vettori \boldsymbol{v_i} è il vettore \boldsymbol{V} che si scrive:

\boldsymbol{V} = \sum_i \boldsymbol{v_i} = \left(\sum_i m_i\right)\boldsymbol{u} = m \boldsymbol{u}.

La risultante sarà un sitema equivalente al primo se il momento rispetto ad un punto sarà lo stesso. Per saperne di più sul prodotto vettoriale consultare la pagina web di Wolfram.

Il momento del sistema di vettori paralleli è la somma dei vettori prodotto tra il vettore \boldsymbol{OP_i} ed il vettore \boldsymbol{v_i}:

\displaystyle \boldsymbol{M} = \sum_i \boldsymbol{OP_i} \times \boldsymbol{v_i} = \sum_i m_i \boldsymbol{OP_i} \times \boldsymbol{u}.

Il momento rispetto allo stesso polo della risultante \boldsymbol{V}, indicando con C il punto di applicazione della risultante, è:

\displaystyle \boldsymbol{M}=\boldsymbol{OC} \times \boldsymbol{V} = m \boldsymbol{OC} \times \boldsymbol{u}.

L’uguaglianza dei due momenti impone l’uguaglianza dei vettori primi termini del prodotto così che otteniamo la relazione:

\displaystyle m \boldsymbol{OC} = \sum_i m_i \boldsymbol{OP_i}.

Da quì è possibile trovare il punto di applicazione C, detto centro dei vettori, della risultante \boldsymbol{V}, riscrivendo la precedente relazione vettoriale per ciascuna componente relativa ad una terna cartesiana O, x, y, z di riferimento, se facciamo coincidere il polo O con l’origine otteniamo:

\displaystyle m \, x_c = \sum_i m_i x_i,

\displaystyle m \, y_c = \sum_i m_i y_i,

\displaystyle m \, z_c = \sum_i m_i z_i.

I secondi membri delle equazioni scritte sopra sono i momenti statici rispetto ai piani coordinati di un sistema puntiforme m_i, corrispondenti alle componenti del momento risultante del sistema stesso.

I momenti statici discendono quindi dal principio di equivalenza di un sistema di vettori paralleli con un unico vettore risultante.

Da qui il passo per giungere al baricentro è semplice. Basta introdurre un campo gravitazionale omogeneo e considerare quale sistema di vettori paralleli le forze peso. In questo caso le componenti m_i hanno valore solo positivo essendo le singole masse (a meno di non considerare corpi di antimateria!), m sarà la massa complessiva ed il centro C diventerà il baricentro G.

Le forze peso sono infatti m_i g dove g è l’accelerazione gravitazionale che è costante pertanto nelle relazioni scompare e rimane solo la massa.

Per i sistemi continui occorre introdurre il calcolo integrale considerando il valore della massa in funzione della densità \delta ovvero scrivendo in differenziali dm = \delta \, dV. I momenti statici si scriveranno come integrali di x dm = x \delta dV. Ulteriore classica semplificazione è assumere la densità costante, e scrivere in definitiva le coordinate del baricentro di un corpo di volume V:

\displaystyle V x_G = \int_V x \, dV,

\displaystyle V y_G = \int_V y \, dV,

\displaystyle V z_G = \int_V z \, dV.

Grazie per l’attenzione. Alla prossima!!!

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