[successivo] [precedente] [inizio] [fine] [indice generale]
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.
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). |
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.
Ciascun oggetto chiuso (riquadri, cerchi, ellissi o blocchi composti) possiede altresì ben otto punti (cardinali) associato ad esso (figura 12.1).
|
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.
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).
|
A partire da due posizioni date, esistono diverse maniere per combinarle insieme per contruirne una terza.
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)
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.
|
L'interpolazione può essere utile, ad esempio, per tracciare connessioni bidirezionali (figura 12.4).
|
La figura 12.4 corrisponde al codice del listato 12.5. Si noti l'uso della forma abbreviata per l'interpolazione.
|
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).
|
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.
|
|
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.
|
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.
|
|
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