SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002 - NUOVO ORDINAMENTO
SECONDO PROGETTO DI INTERFACCE - A.A. 2001-2002
NUOVO ORDINAMENTO
APPENDICE AL TESTO
Il programma di triangolazione si comporta correttamente
soltanto se
- il poligono e' semplice, ovvero non intrecciato
- i suoi vertici sono dati in senso antiorario
Semplicita' del poligono
E' responsabilita' dell'utente fornire un poligono semplice.
L'interfaccia NON deve controllare che il poligono sia semplice.
Se fornisce un poligono non semplice verra' una triangolazione
errata.
Vertici in senso antiorario
NOTA:
Se l'interfaccia disegna il poligono in coordinate di device,
dove la y cresce verso il basso, allora il verso appare
invertito: un poligono dato in senso antiorario appare come orario
e viceversa.
Qui l'idea era dire, come nel caso precedente,
che e' responsabilita' dell'utente fornire un poligono
con l'orientamento giusto.
Ma se i vertici del poligono sono dati in
senso orario il programma di triangolazione (metodo
triangulate()) non termina, bloccando anche l'interfaccia,
e questo non e' bello.
Pertanto facciamo in modo che si possano trattare anche poligoni dati
in senso orario.
E' fornita una NUOVA VERSIONE del file
TriPolig.java
che contiene in piu' i due metodi pubblici:
-
boolean isCounterClockwise()
Restituisce true se i vertici sono dati in senso antiorario,
false altrimenti.
-
void reversePolygon()
Inverte la lista dei vertici del poligono (il primo diventa
l'ultimo ecc.).
Dopo aver costruito il poligono e PRIMA di iniziare a triangolarlo
occorre inserire una linea del tipo:
if (!tp.isCounterClockwise()) tp.reversePolygon();
dove tp e' la vostra variabile di tipo TriPolig.
ATTENZIONE:
Non l'ho testato esaustivamente, se riscontrate
che si comporti in modo errato avvisatemi!