Cada linha deve dividir o plano para "dentro" e "contorno"; você pode descobrir isso usando o método usual do produto interno.
Mova todas as linhas para fora por alguma distância.
Considere todo par de linhas vizinhas (linhas, não segmento de linha), encontre a interseção. Estes são o novo vértice.
Limpe o novo vértice removendo as peças que se cruzam. - nós temos alguns casos aqui
a) Caso 1:
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
se você gastá-lo por um, você conseguiu o seguinte:
0----a----3
| | |
| | |
| b |
| |
| |
1---------2
7 e 4 se sobrepõem. Se você vir isso, remova esse ponto e todos os pontos intermediários.
b) caso 2
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
se você gastá-lo por dois, você conseguiu o seguinte:
0----47----3
| || |
| || |
| || |
| 56 |
| |
| |
| |
1----------2
Para resolver isso, para cada segmento de linha, você deve verificar se ele se sobrepõe aos últimos segmentos.
c) caso 3
4--3
0--X9 | |
| 78 | |
| 6--5 |
| |
1--------2
despesa de 1. este é um caso mais geral para o caso 1.
d) caso 4
igual ao case3, mas gasta em dois.
Na verdade, se você pode lidar com o caso 4. Todos os outros casos são apenas casos especiais, com alguma linha ou vértice sobreposto.
No caso 4, você mantém uma pilha de vértices. Você pressiona quando encontra linhas sobrepostas à última linha e a abre quando obtém a última linha. - exatamente como você faz no casco convexo.