Cada línea debe dividir el plano a "dentro" y "contorno"; Puede averiguarlo utilizando el método habitual de producto interno.
Mueva todas las líneas hacia afuera por cierta distancia.
Considere todos los pares de líneas vecinas (líneas, no segmentos de línea), encuentre la intersección. Estos son el nuevo vértice.
Limpie el nuevo vértice eliminando las partes que se cruzan. - tenemos algunos casos aquí
(a) Caso 1:
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
si lo gastas por uno, obtienes esto:
0----a----3
| | |
| | |
| b |
| |
| |
1---------2
7 y 4 se superponen ... si ve esto, elimina este punto y todos los puntos intermedios.
(b) caso 2
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
si lo gastas por dos, obtienes esto:
0----47----3
| || |
| || |
| || |
| 56 |
| |
| |
| |
1----------2
Para resolver esto, para cada segmento de línea, debe verificar si se superpone con los últimos segmentos.
(c) caso 3
4--3
0--X9 | |
| 78 | |
| 6--5 |
| |
1--------2
gasto por 1. este es un caso más general para el caso 1.
(d) caso 4
igual que en el caso 3, pero gasto por dos.
En realidad, si puede manejar el caso 4. Todos los demás casos son solo casos especiales con alguna superposición de línea o vértice.
Para hacer el caso 4, mantienes una pila de vértices ... empujas cuando encuentras líneas superpuestas con la última línea, revísala cuando obtienes la última línea. - Al igual que lo que haces en el casco convexo.