Was ist der Nutzen von Boost Polygon?

Dies ist eine Frage zu Boost Polygon (nicht zu Boost Geometry)

or kurzem habe ich versucht, mit einigen geometrischen Polygonkonstruktionen zu spielen. Schon seitBoost Geometry (einander Bibliothek, die sich auch mit Polygonen befasst) funktioniert in Boost 1.58 nicht umständlicBoost Polygon.

achdem ich versucht hatte, die Bibliothek zu verstehen und nicht die erwarteten Ergebnisse erzielt hatte, stellte ich fest, dass die Bibliothek nur für ganzzahlige Koordinaten funktionier Zuerst dachte ich, dass dies eine Einschränkung für die Eingabe war, aber in der Tat sind alle internen Operationen und Ausgaben ganze Zahlen, dies macht alle Ausgaben ziemlich schrullig, zum Beispiel sind die Schnittpunkte für Polygone leicht deformiert (weil die Koordinaten der Eckpunkte sein müssen) ganze Zahlen).

Ein Zitat von der Hauptseite (Hervorhebung von mir):

Der Koordinatendatentyp ist ein Vorlagenparameter aller Datentypen und Algorithmen, die von der Bibliothek bereitgestellt werden, unds wird erwartet, dass @ ganzzahlig ist. Datentypen für Gleitkommakoordinaten werden nicht unterstützt durch die in der Bibliothek implementierten Algorithmen aufgrund der Tatsache, dass das (sic) Erreichen von Gleitkommarobustheit eine andere Menge von Algorithmen und allgemein plattformspezifische Annahmen über Gleitkommadarstellungen impliziert.

Zuerst dachte ich, dass es ein Problem zwischen exakter und ungenauer Darstellung war, also versuchte ich, es mit rationalen (Boost Rational) Typen funktionieren zu lassen (ich fand eine rationale Wrapper-Klasse heraus, um es kompilieren zu lassen), aber tatsächlich sind die Ganzzahlkoordinaten streng Anforderung (Es gibt Teile im Code, die tatsächlich einen addieren und subtrahieren, um Zwischenergebnisse zu erstellen.)

Um auf ganze Zahlen zurückzukommen, musste ich die Koordinaten sehr groß machen (ganzzahlig), damit dieses Diskriminanzproblem verschwindet. Mit anderen Worten, ich muss alles hin und her normalisieren. Nun, am Ende ist es nicht sehr nützlich oder praktisch, wie ich ursprünglich gedacht habe.

ehlt mir etwas Wichtiges zur Nutzung dieser Bibliothe

Ist diese Bibliothek für "pixelige" Probleme gedacht? Was ist das Hilfsprogramm, wenn die Koordinaten auf Ganzzahlen beschränkt sind?

Ist die Idee, die Koordinaten auf sehr große Zahlen zu skalieren und die Ergebnisse später für geometrische Anwendungen zu renormieren?

Ich verstehe, dass Computational Geometry mit Gleitkomma sehr schmerzhaft ist,Aber warum versucht diese Bibliothek nicht einmal, mit genauen Begründungen kompatibel zu sein?

Gibt es echte Anwendungsbeispiele? (Das Handbuch ist ziemlich schlecht bei der Angabe von Beispielen) Nutzt jemand diese Bibliothek tatsächlich?

Bonus-Frage:Ist das eine verlassene Bibliothek?

Dies ist ein Beispiel für das Verhalten der Bibliothek anhand der Ganzzahlkoordinaten:

Hier ist ein Beispiel dafür, was mit ganzzahligen Polygonen passiert. Wenn ich kleine Zahlen verwende, um die Koordinaten darzustellen, sind die Ergebnisse nicht einmal geometrisch konsistent. (Die beiden Polygone sindpolygon(-2,0)(2,-2)(6,4)(0,2) undpolygon(-5,0)(-1,-2)(3,4)(-3,2))

(beachte, wie schief alles herauskommt.)

Aber wenn ich die Polygone skaliere, um große Ganzzahlkoordinaten zu erhalten, werden die Ergebnisse genauer (Die beiden Polygone sindpolygon(-200,0)(200,-200)(600,400)(0,200) undpolygon(-500,0)(-100,-200)(300,400)(-300,200), skalierte Versionen der beiden oben.):

EDIT: Ich habe ein bisschen mehr über Berechnungsgeometrie gelernt, anscheinend ist die Robustheit der Berechnungsgeometrie ein sehr schwieriges Problem. Eine der Strategien ist die Verwendung von Ganzzahlarithmetik. Es sieht so aus, als würde Boost.Polygon diesen Ansatz verfolgen. Probleme im zusammenhängenden Raum sollten angemessen skaliert werden.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage