Ich kämpfe mit Boost :: Polygon - anscheinend kann es alles außer dem, was ich will. Ich habe ein paar Grenzen, die Polygone und ihre Löcher beschreiben (im 2D-Raum). Im Allgemeinen können wir sogar ein Loch in einem Loch (kleineres Polygon im Loch eines größeren Polygons) oder viele Löcher in einem Polygon haben. Wenn es notwendig ist, kann ich überprüfen, welche Grenze ein Loch beschreibt und welches ein Polygon beschreibt. Manchmal sind die Grenzen getrennt (und sie enthalten sich nicht gegenseitig), was bedeutet, dass wir viele Polygone haben. Was ich will, ist eine Methode, die mir eine Reihe einfacher, keine Löcher enthaltender Polygone gibt, die zusammen ein "löchriges" Polygon bilden.C++: Liste einfacher Polygone aus Polygon mit Löchern
Antwort
Dies ist mit Boost Polygon möglich. Sie benötigen polygon_set_data::get()
, was das Loch für Sie bricht, wenn Sie von einem Polygon-Konzept, das Löcher unterstützt, in ein anderes umwandeln. Siehe: http://www.boost.org/doc/libs/1_65_0/libs/polygon/doc/gtl_polygon_set_concept.htm für weitere Details.
Das Folgende ist ein Beispiel, wo wir ein Polygon mit einem Loch zuerst darstellen, es dann mit nur einem Ring zu einem einfachen Polygon umwandeln:
#include <boost/polygon/polygon.hpp>
namespace bp = boost::polygon;
int main(void)
{
using SimplePolygon = bp::polygon_data<int>;
using ComplexPolygon = bp::polygon_with_holes_data<int>;
using Point = bp::point_data<int>;
using PolygonSet = bp::polygon_set_data<int>;
using SimplePolygons = std::vector<bp::polygon_data<int>>;
using namespace boost::polygon::operators;
std::vector<Point> points{{5, 0}, {10, 5}, {5, 10}, {0, 5}};
ComplexPolygon p;
bp::set_points(p, points.begin(), points.end());
{
std::vector<Point> innerPoints{{4, 4}, {6, 4}, {6, 6}, {4, 6}};
std::vector<SimplePolygon> inner(1, SimplePolygon{});
bp::set_points(inner.front(), innerPoints.begin(), innerPoints.end());
bp::set_holes(p, inner.begin(), inner.end());
}
PolygonSet complexPolygons;
complexPolygons += p;
SimplePolygons simplePolygons;
complexPolygons.get<SimplePolygons>(simplePolygons);
std::cout << "Fractured:\n";
for (const auto& polygon : simplePolygons)
{
for (const Point& p : polygon)
{
std::cout << '\t' << std::to_string(p.x()) << ", " << std::to_string(p.y())
<< '\n';
}
}
return 0;
}
Danke! Diese Frage wurde so lange aufgehängt, dass ich dir, egal was, ein Zeichen gab. – Ch3shire
Wissen Sie, wie Sie umgekehrt vorgehen, d. H. Von einem polygon_set zu polygon_with_holes? –
Ich bin mir nicht sicher, ob Boost Polygon das nativ unterstützt, aber es sollte nicht allzu schwierig sein, dies selbst zu implementieren, indem man nach den 'Fracturing'-Kanten sucht und sie entfernt. –
- 1. Plot ggplot Polygone mit Löchern mit geom_polygon
- 2. Wie stelle ich ein Polygon mit Löchern dar?
- 3. Robust, schnell komplexes Polygon (mit Löchern) Triangulation c/C++ Bibliothek mit permissiver Lizenz
- 4. Punkte in Polygon, mehrere Polygone
- 5. Konvertieren eines Polygons mit Löchern in mehrere einfache Polygone ohne Löcher
- 6. Polygon Infill-Algorithmus
- 7. Schnellster Triangulationsalgorithmus mit Löchern?
- 8. Polygone mit Doppelkoordinaten
- 9. Generiere konvexe Polygone aus Rechtecken
- 10. C# zeichnen Kurve und Polygon mit Mausereignissen
- 11. Füllen Voronoi Polygone mit ggplot
- 12. Polygon-Triangulation
- 13. Wie schrumpfen Polygone mit Postgis?
- 14. Wie schneidet man zwei Polygone?
- 15. Wie ein Polygon in Unter Polygone teilen und id sie
- 16. Split Polygon in mehrere Polygone basierend auf Raster (html5 Leinwand)
- 17. Arbeiten mit SVG-Polygon-Elementen
- 18. Polygon-Polygon-Schnittpunkt schlägt im Spezialfall fehl
- 19. plotten ein Polygon aus einem räumlichen Polygon Datenrahmen
- 20. Finden Sie die meisten Polygon mit tatsächlichen Bereich aus dem Array von verschachtelten Polygon
- 21. Gefüllte Polygone in R mit ggplot nicht
- 22. C# -Anwendung mit einfacher Datenbank?
- 23. Offset-Polygone in Javascript
- 24. Kombiniere Voronoi Polygone und Karten
- 25. Bildsegment aus Polygon extrahieren, mit skimage
- 26. C++ Ziel löst Fehler mit einfacher Grammatik aus T.g
- 27. Zeichnung Polygon mit Prospekt js
- 28. Punkte, Linien und Polygone auf Kugeln mit C/C++
- 29. get Zentrum Polygon C#
- 30. Einfacher C++ - MIME-Parser
klar ist nicht, was genau Sie wollen. Wenn Ihre Polygone Löcher haben, sind sie keine einfachen Polygone. Angenommen, Sie haben dieses Polygon mit einem Loch ▣, welche Art von Ausgabe möchten Sie? –
Meine gewünschte Ausgabe ist, zwei Polygone zu erhalten, die zusammen ein Eingabe-Polygon mit Loch bilden. – Ch3shire
Oh, Sie möchten die Eingabeform in einfache Polygone schneiden. –