Ogni linea dovrebbe dividere il piano in "interno" e "contorno"; puoi scoprirlo usando il solito metodo del prodotto interno.
Sposta tutte le linee verso l'esterno di una certa distanza.
Considera tutte le coppie di linee vicine (linee, non segmento), trova l'intersezione. Questi sono i nuovi vertici.
Pulisci il nuovo vertice rimuovendo le parti intersecanti. - abbiamo alcuni casi qui
(a) Caso 1:
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
se lo spendi per uno, ottieni questo:
0----a----3
| | |
| | |
| b |
| |
| |
1---------2
7 e 4 si sovrappongono .. se vedi questo, rimuovi questo punto e tutti i punti in mezzo.
(b) caso 2
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
se lo spendi per due, ottieni questo:
0----47----3
| || |
| || |
| || |
| 56 |
| |
| |
| |
1----------2
per risolvere questo, per ogni segmento di linea, è necessario verificare se si sovrappone a questi ultimi segmenti.
(c) caso 3
4--3
0--X9 | |
| 78 | |
| 6--5 |
| |
1--------2
spesa di 1. questo è un caso più generale per il caso 1.
(d) caso 4
come case3, ma spese di due.
In realtà, se riesci a gestire il caso 4. Tutti gli altri casi sono solo casi speciali con qualche riga o vertice sovrapposti.
Per fare il caso 4, mantieni una pila di vertici .. spingi quando trovi linee che si sovrappongono con quest'ultima, fai scoppiare quando ottieni quest'ultima. - proprio come quello che fai nello scafo convesso.