Es gibt eine große Bibliothek für Geometrie in Boost. Es erlaubt auch, SVG-Bilder zu zeichnen. Ich möchte es in einem meiner Projekte verwenden, aber es funktioniert wirklich seltsam für mich (siehe Bild unten).
Also haben wir 3 Pixelpunkte, die als quadratische Polygone im 2ten Raum dargestellt werden
%Vor% pic 1
Wir wollen von ihnen eine Vereinigung bekommen und sie vereinfachen, damit wir, wenn wir sie skalieren, ein Dreieck wie
bekommen %Vor% pic 2
aber wir bekommen das:
wobei die gelbe gestrichelte Linie eine Vereinigung ist und Grün eine Vereinfachung ist.
Quellcode:
%Vor%erfordert mindestens Boost 1.47.0 und 3 Dateien von Boost / Geometrie / Erweiterungen / io / svg /
Also wie man es vereinfacht, wie ich möchte, dass die Bedeutung wie pic 2
aussieht?
Neuer Code erstellt, funktioniert einwandfrei, ziemlich getestet:
%Vor%Und dieser Code erzeugt ein solches Bild:
Und für 3 Punkte gibt es Bilder zurück @J. Calleja antwortet:
Ich denke, es gibt mehrere Probleme mit dem Code:
1 1
1 0
Das ist:
%Vor%
Das erwartete Ergebnis unterscheidet sich also von pic2.
Sie verpassen den Schließpunkt und das dritte Polygon ist nicht im Uhrzeigersinn ausgerichtet. Sehen Sie sich die Korrektur an Methode. In diesem Beispiel sollten Sie es für jedes von Ihnen definierte Polygon aufrufen.
Sie sollten eine temporäre Variable verwenden:
%Vor%Nach der Ausführung des korrigierten Codes lautet das Ergebnis:
Dies kann eine gültige Vereinfachung Ihres Polygons sein. Siehe den Ramer-Douglas-Peucker-Algorithmus .
Nach dem Ausführen dieser Änderungen folgt das folgende main ()
%Vor%Tags und Links c++ boost boost-geometry