Guida a JGraph, programma per tracciare grafici e diagrammi strutturati: Curve di Bézier.

Si possono generare delle linee curve con Jgraph se si interpretano alcuni dei punti indicati come punti di controllo per una curva di Bézier.

Nella sezione 6.13 vengono indicati dei possibili spunti di approfondimento sulla questione, ma si consideri che per definire una curva di Bézier con Jgraph servono almeno quattro punti, e in generale è possibile tracciare una curva di Bézier mediante 3*n+1 punti di controllo, di cui 2*n di controllo e i rimanenti n+1 di passaggio della curva.

Il listato 6.22 e la figura 6.23 fornuscono un esempio in cui viene disegnato un pallone da football americano (molto stilizzato a dire il vero) mediante curve di Bézier.
  1. Una curva di Bézier è una particolare curva parametrica, che ha grande applicazione nella computer grafica. Un metodo numericamente stabile per calcolare le curve di Bézier è l'algoritmo di de Casteljau. Wikipedia
Listato 6.22. Jgraph: curve di Bézier.
newgraph 
xaxis min 0 max 10 nodraw
yaxis min 0 max 10 nodraw

(* Draw the outline of the football *)
newline bezier poly pcfill .543 .270 .074 pts
  0 5   3 10   7 10    10 5
        7 0    3 0     0 5

(* Draw the main thread *)

newline bezier linethickness 4 gray 1 pts
  3 7 4.5 8 5.5 8 7 7

(* Draw the crossthreads *)

copycurve nobezier pts 3.5 6.7 3.3 7.5
copycurve pts 6.5 6.7 6.7 7.5
copycurve pts 4.2 7.1 4.1 7.9
copycurve pts 5.8 7.1 5.9 7.9
copycurve pts 5 7.3  5 8.1
Figura 6.23.
f-football-jgr
Altre caratteristiche.
Accenniamo ad alcune ulteriori interessanti caratteristiche del programma Jgraph, rinviando il lettore interessato alla sezione 6.13 per eventuali approfondimenti.

Dall'interno di un sorgente Jgraph è possibile invocare un comando della shell o un programma esterno scrivendo shell : comando; l'output generato viene contestualmente incluso nel sorgente.
Ovviamente si tratta di una caratteristica estremamente interessante e potente, poiché permette di utilizzare strumenti come Perl, Awk e simili per il tracciamento di grafici di funzione, estrazione e manipolazione di dati, ecc.; parallelamente si tratta di una caratteristica potenzialmente pericolosa, in quanto Jgraph non effettua nessun controllo sul comando che viene eseguito, aprendo così il varco a possibili cavalli di Troia.
Prestare dunque un'adeguata cautela!
Un'altra caratteristica interessante di Jgraph è quella di poter utilizzare una qualunque immagine in formato EPS come indicatore, utilizzando l'attributo di curva eps.

Infine, si noti che è possibile tracciare più di un grafico nella stessa immagine mediante un ulteriore newgraph oppure mediante copygraph: in quest'ultimo caso il grafico successivo eredita gli assi dal precedente. Il posizionamento relativo dei vari grafici è gestibile mediante gli attributi di grafico x_translate e y_translate. È altresì possibile posizionare i vari grafici su più pagine, mediante la parola chiave newpage. Il listato 6.24 e la figura 6.25 presentano un esempio di utilizzo di copygraph.

Listato 6.24. Jgraph: grafici multipli.
newgraph
xaxis min 0 max 10 size 1 label fontsize 16 font Times-Italic : Graph 1
yaxis min 0 max 10 size 1

newcurve marktype box linetype solid pts 1 10 2 8 5 5 8 3 10 2

copygraph 
x_translate 2
xaxis label : Graph 2
newcurve marktype box linetype solid pts 10 10 8 8 5 5 8 3 10 2
Figura 6.25.
f-copygraph-jgr
Utilizzo programmatico.
Il punto di forza dei programmi non interattivi è quello di poter essere facilmente utilizzati come anelli di una catena di strumenti o processi; la connessione delle varie parti può essere gestita semplicemente mediante generiche pipeline, o addirittura mediante specifici programmi «wrapper», progettati per uno scopo preciso, che costruiscano programmaticamente l'input da far elaborare.

«njgraph.pl»
Un esempio interessante è il programma njgraph.pl di Neil Spring. Si tratta di un piccolo sorgente in Perl che in pratica realizza una specie di programma frontale per Jgraph: esso legge dallostandard input una singola serie di dati da rappresentare graficamente, e dopo averli opportunamente passati a Jgraph per l'elaborazione invoca GV, a meno che lo standard output non venga rediretto.

Il programma njgraph.pl riconosce altresì gli attributi marktypelinetype e color (e relativi valori) facoltativamente presenti sulla riga di comando, e li posiziona opportunamente all'interno del sorgente Jgraph prima dell'elaborazione.

La figura 6.26 illustra qualche esempio di invocazione del programma njgraph.pl, mentre la figura 6.27 ne illustra l'output.

Figura 6.26. Invocazione del programma njgraph.pl.
njgraph.pl[Invio]
automatically invoking gv; redirect if you want something else
1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]
[Ctrl d]
[q]
njgraph.pl marktype box linetype dashed color 1 0 0[Invio]
automatically invoking gv; redirect if you want something else
1 7 2 3 3 8 4 6 5 3 6 2 7 4 8 7 9 5 10 7[Invio]
[Ctrl d]
[q]
Figura 6.27. Output del programma njgraph.pl.
njgraph-output-1 njgraph-output-2


Se ti è piaciuto l'articolo , iscriviti al feed cliccando sull'immagine sottostante per tenerti sempre aggiornato sui nuovi contenuti del blog:

reeder
Luca Soraci

Luca Soraci

Ubuntu giunge alle nostre orecchie solo perché è stato mutuato come nome per un sistema operativo di successo; lo abbiamo sentito nei discorsi di Mandela, del vescovo Tutu, ed è uno dei concetti fondanti di quel movimento di rinascimento che vuole far fiorire il continente africano al di sopra delle difficoltà attuali.

Nessun commento:

Posta un commento

Powered by Blogger.