Algorithm Jarvis(input: points, output: hull) begin bottom = punto di ordinata minima in points; top = punto di ordinata massima in points; hull = lista vuota; current = bottom; repeat current = NextHullPointUp(current,points); aggiungi current alla lista hull; until (current==top); repeat current = NextHullPointDown(current,points); aggiungi current alla lista hull; until (current==bottom); endDove vengono usate le funzioni ausiliarie NextHullPointUp e NextHullPointDown, che sono dettagliate piu' avanti.
Procedure NextHullPointUp(input: start, point, output: next) begin next = scorri l'insieme points dall'inizio fino a trovare un punto con ordinata maggiore di start oppure con ordinata uguale ed ascissa minore di start; p = next; repeat begin p = scorri l'insieme points dalla posizione dopo next fino a trovare un punto con ordinata maggiore di start oppure con ordinata uguale ed ascissa minore di start; if p esiste then begin controlla la terna (start, next, p); if (svoltano a destra) OR ( (sono allineati) AND (dist(next,start)<dist(p,start)) ) then next = p; end if end while l'insieme points non e' stato esaminato tutto return next; endLa funzione dist(...) calcola la distanza tra due punti.
Su tale lista sono necessarie almeno le operazioni:
Notare che, non essendo necessaria la cancellazione di elementi dalla lista, la lista puo' essere semplicemente linkata (non bidirezionalie). Per supportare efficientemente l'aggiunta di un punto in coda e' necessario l'uso di un puntatore alla coda della lista.
La struttura dati per l'insieme points puo' essere un array.Se si implementa l'insieme points ad array, nella lista possono essere memorizzati gli indici dei corrispondenti punti anziche' i punti stessi.
Primitive fondamentali sono il calcolo dell'orientamento di una terna di punti che avete implementato nell'esercitazione guidata. [BINARY]