[successivo] [precedente] [inizio] [fine] [indice generale]


Sezione 12.   Posizioni

La posizione dei punti sulla superficie grafica può venire descritta in molti modi differenti. Per quanto riguarda la sintassi del linguaggio Pic, le varie forme descrittive sono equivalenti: ove se ne possa usare una in particolare, ogni altra che abbia la stessa semantica è permessa anch'essa.

L'etichetta speciale Here si riferisce sempre alla posizione corrente.

12.1   Coordinate assolute

Il modo più immediato per indicare un punto è utilizzare le coordinate cartesiane assolute;(1) Pic utilizza un sistema di riferimento cartesiano con origine nel vertice inferiore sinistro della superficie grafica virtuale (con gli assi orientati in maniera usuale). Una posizione assoluta si può sempre scrivere nel modo usuale come coppia di numeri separati dalla virgola e racchiusi in parentesi (tonde) - e tale pratica è raccomandata per garantire la leggibilità del codice. Se il contesto è tale da escludere ambiguità, la coppia di coordinate può essere indicata senza le parentesi.

L'utilizzo delle coordinate assolute è tuttavia sconsigliabile, poiché esse tendono a rendere le descrizioni difficilmente comprensibili e adattabili. È meglio utilizzare la flessibilità del linguaggio Pic per specificare le posizioni relativamente agli oggetti precedentemente tracciati (sezione 12.2).

12.2   Posizioni relative agli oggetti

Il simbolo Here si riferisce sempre alla posizione dell'ultimo oggetto tracciato, oppure al punto finale dell'ultimo spostamento.

Senza ulteriori specificazioni, una descrizione come last circle come di qualunque oggetto chiuso o arco, si riferisce al centro geometrico dell'oggetto stesso. Senza ulteriori specificazioni, il nome di una linea o spline si riferisce al punto iniziale dell'oggetto stesso.

Inoltre gli oggetti Pic posseggono un certo numero di posizioni menzionabili associate ad essi. Una di queste è il centro dell'oggetto, il quale (per ridondanza) può essere indicato con il suffisso .center (o semplicemente .c). Sicché last circle .center equivale a last circle.

12.2.1   Posizioni relative agli oggetti chiusi

Ciascun oggetto chiuso (riquadri, cerchi, ellissi o blocchi composti) possiede altresì ben otto punti (cardinali) associato ad esso (figura 12.1).

Figura 12.1. I punti cardinali.

I punti cardinali

Pertanto, il codice last circle .s si riferisce al punto sud dell'ultimo cerchio tracciato. La riga 5 del listato 10.5 si potrebbe dunque scrivere così: move to last circle .s;.

In alternativa ai quattro punti cardinali principali (.n, .s, .e e .w) sono disponibili rispettivamente i nomi .top, .bottom, .left e .right (o semplicemente .t, .b, .l e .r).

Si possono anche usare i nomi center, top, bottom, left, right, north, south, east e west (si noti che manca il punto iniziale) in forma di prefisso marcato dalla parola chiave of; sicché center of last circle oppure top of 2nd last ellipse sono entrambi corretti riferimenti a oggetti. Infine, i nomi left e right possono essere preceduti da upper oppure lower, con ovvio significato (vedi anche listato 4.2).

Anche gli archi possiedono punti cardinali, che concidono con quelli dell'associato cerchio.

12.2.2   Posizioni relative agli oggetti aperti

Gli oggetti aperti (linee, frecce, archi e spline) possiedono tre punti menzionabili: .start, .center (oppure .c) e .end. È possibile anche utilizzarli in forma prefissa (senza il punto iniziale, e con la parola chiave of). Il centro dell'arco coincide con il centro del cerchio associato, ma il centro di una linea, spezzata o spline è il punto medio degli estremi (figura 12.2).

Figura 12.2. Punti speciali associati agli oggetti aperti.

Punti speciali associati agli oggetti aperti

12.3   Comporre le posizioni

A partire da due posizioni date, esistono diverse maniere per combinarle insieme per contruirne una terza.

12.3.1   Somma vettoriale e traslazioni

Le posizioni possono essere addizionate o sottratte per generare una nuova posizione.(2) Il risultato è l'usuale somma vettoriale (somma per coordinate). Ad esempio, last box .ne + (0.1, 0) è una posizione valida: questo esempio costituisce un utilizzo tipico, per definire una posizione lievemente sfasata rispetto a quella data.(3)

12.3.2   Interpolazione

Una posizione può risultare dall'interpolazione di due posizioni date. La sintassi è:

frazione of the way between prima_posizione and seconda_posizione

Per esempio, si può scrivere: 1/3 of the way between here and last ellipse .ne. La frazione può esprimersi nella forma numeratore/denominatore oppure in notazione decimale.(4) Alternativamente, e in modo più sintetico, si può scrivere:

frazione <prima_posizione,seconda_posizione>

Pertanto il precedente esempio potrebbe scriversi: 1/3 <here, last ellipse .ne>. Come ulteriore esempio si consideri la figura 12.3.

Figura 12.3. P: 1/3 of the way between last arrow .start and last arrow .end.

«P: 1/3 of the way between last arrow .start and last arrow .end»

L'interpolazione può essere utile, ad esempio, per tracciare connessioni bidirezionali (figura 12.4).

Figura 12.4. Connessioni bidirezionali.

Connessioni bidirezionali

La figura 12.4 corrisponde al codice del listato 12.5. Si noti l'uso della forma abbreviata per l'interpolazione.

Listato 12.5.

A: box "yin"; move;
B: box "yang";
arrow right at 1/4 <A.e,A.ne>;
arrow left  at 1/4 <B.w,B.sw>;

12.3.3   Proiezioni

Date due posizioni prima_posizione e seconda_posizione, la posizione:

(prima_posizione,seconda_posizione)

ha l'ascissa di prima_posizione e l'ordinata di seconda_posizione. Ciò può tornare utile per posizionare oggetti ai vertici di un riquadro ipotetico determinato da altri due oggetti (figura 12.6).

Figura 12.6. Utilizzo della composizione per proiezione.

Utilizzo della composizione per proiezione

12.4   Utilizzo delle posizioni

Ci sono quattro modi di utilizzo delle posizioni: at, from, to e with. Si tratta di quattro modificatori, cioè vanno usati come suffisso dei comandi di tracciamento.

Il modificatore at comporta il tracciamento di un oggetto chiuso oppure di un arco con il centro coincidente con la posizione che segue, ossia il tracciamento di una linea, spline o freccia a partire dalla posizione che segue.

Il modificatore to può essere utilizzato da solo per specificare la destinazione di uno spostamento; analogamente per il modificatore from.

I modificatori from e to possono anche essere utilizzato assieme a line o arc per specificare gli estremi dell'oggetto. Usati assieme ai nomi di posizione, forniscono un meccanismo assai flessibile al fine di connettere i vari oggetti. Si considerino ad esempio il listato 12.7 e la corrispondente figura 12.8.

Listato 12.7.

box "partenza"
move 0.75;
ellipse "arrivo"
arc -> cw from 1/3 of the way \
    between last box .n and last box .ne to last ellipse .n;

Figura 12.8. Una connessione un po' complicata, descritta con una sintassi naturale.

Una connessione un po' complicata

Il modifcatore with consente di identificare punti di due oggetti. Si tratta di un modo molto naturale per connettere gli oggetti. Si consideri, a mo' d'esempio, la figura 12.9.

Figura 12.9. Uso del modificatore with (sono evidenziati i punti di giunzione).

Uso del modificatore «with»

12.5   Il modificatore «chop»

Quando le linee tracciate fra due cerchi non li intersecano nei punti cardinali, è utile poterle accorciarle della lunghezza dei raggi dei cerchi ad entrambi i capi. Il listato 12.10 e la corrispondente figura 12.11 illustrano l'utlilizzo del modificatore chop.

Listato 12.10.

.PS
circle "x"
circle "y" at 1st circle - (0.4, 0.6)
circle "z" at 1st circle + (0.4, -0.6)
arrow from 1st circle to 2nd circle chop
arrow from 2nd circle to 3rd circle chop
arrow from 3rd circle to 1st circle chop
.PE

Figura 12.11. Il modificatore chop.

Il modificatore «chop»

Si osservi che il modificatore chop sposta le punte di freccia, non le tronca. Per difetto, il modificatore chop accorcia entrambi i capi della linea di una lunghezza pari a circlerad. Aggiungendo un suffisso numerico è possibile modificare tale lunghezza.

Scrivendo:

line ... chop primo_raggio chop secondo_raggio

con primo_raggio e secondo_raggio valori numerici, è possibile modificare la lunghezza di accorciamento ad entrambi i capi. Usando tale descrizione assieme alle funzioni trigonometriche, è possibile scrivere codice che gestisce intersezioni ancora più complicate.


Informatica per sopravvivere 2006.01.30 --- Copyright © 2004-2006 Massimo Piai -- <pxam67 (ad) virgilio·it>


1) Espresse i pollici.

2) Per la precisione, possono essere addizionate una posizione e una coppia di espressioni; quest'ultima deve comparire come secondo termine dell'operazione.

3) Un possibile utilizzo è per posizionare correttamente delle didascalie.

4) I valori non sono ristretti all'intervallo [0..1].


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome posizioni.html

[successivo] [precedente] [inizio] [fine] [indice generale]

Valid ISO-HTML!

CSS validator!