Rand kann sich nicht selber scheiden?
Die Optimale Lösung zu finden ist vmtl. NP-Hard.
Ich würde das iterativ angehen:
- Oberste waagrechte Linie nehmen, nach unten schauen bis sie eine andere Linie berührt.
- Gefundenes Rechteck speichern und aus dem Datensatz entfernen (Die Start-Linie durch die drei anderen Kanten des gefundenen Rechtecks ersetzen)
- Daten normieren: Linien die aufeinanderliegen vereinigen, einsame Punkte (die mit 0°-Winkel) entfernen, fehlende Eckpunkte nachtragen, überflüssige Eckpunkte entfernen (also aneinanderstoßende Ecken, 180°, zusammenfassen)
- Wenn noch Daten vorhanden: goto 1
Wenn du das in die "andere" Richtung machst, also z.B. von unten nach oben, kommt halt was anderes raus.
Schritt 3 ist vmtl. das Aufwändigste. Nicht kompliziert, aber eben viele verschiedene Fälle zu berücksichtigen. und das ggfs. mehrfach hintereinander, bis keine Optimierungen mehr gefunden werden.