各線は、平面を「内側」と「輪郭」に分割する必要があります。通常の内積法を使用してこれを見つけることができます。
すべての線を少し距離だけ外側に移動します。
隣接するラインのすべてのペア(ラインセグメントではなくライン)を考慮して、交点を見つけます。これらは新しい頂点です。
交差している部分を削除して、新しい頂点をクリーンアップします。-ここにはいくつかのケースがあります
(a)ケース1:
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
あなたがそれを1つ消費すると、あなたはこれを得ました:
0----a----3
| | |
| | |
| b |
| |
| |
1---------2
7と4が重なります。これが表示された場合は、このポイントとその間のすべてのポイントを削除します。
(b)ケース2
0--7 4--3
| | | |
| 6--5 |
| |
1--------2
あなたがそれを2つ消費すると、あなたはこれを得ました:
0----47----3
| || |
| || |
| || |
| 56 |
| |
| |
| |
1----------2
これを解決するには、ラインの各セグメントについて、それが後のセグメントとオーバーラップするかどうかを確認する必要があります。
(c)ケース3
4--3
0--X9 | |
| 78 | |
| 6--5 |
| |
1--------2
1で消費します。これは、ケース1のより一般的なケースです。
(d)ケース4
case3と同じですが、2を使います。
実際、ケース4を処理できる場合。他のすべてのケースは、線または頂点が重なっている特殊なケースです。
ケース4を行うには、頂点のスタックを保持します。後者のラインと重複するラインを見つけたらプッシュし、後者のラインを取得したらポップします。-凸包で行うのと同じです。