¿Cuál es la utilidad de Boost Polygon?

Esta es una pregunta sobre Boost Polygon (no sobre Boost Geometry)

Recientemente estaba tratando de jugar con algunas construcciones de polígonos geométricos. Ya queMejora la geometría (unadiferente la biblioteca que también se ocupa de polígonos) no funciona de manera circunstancial en Boost 1.58, aunque intentaríaPolígono de refuerzo.

Después de intentar comprender la biblioteca y no obtener los resultados esperados, descubrí que la biblioteca solo funciona para coordenadas enteras. Al principio pensé que esto era una limitación para la entrada, pero de hecho todas las operaciones internas y las salidas son enteros, esto hace que toda salida sea bastante peculiar, por ejemplo, las intersecciones para los polígonos están ligeramente deformadas (porque las coordenadas de los vértices tienen que ser enteros )

Una cita de la página principal (énfasis mío):

El tipo de datos de coordenadas es un parámetro de plantilla de todos los tipos de datos y algoritmos proporcionados por la biblioteca, yse espera que sea integral. Los tipos de datos de coordenadas de punto flotante no son compatibles por los algoritmos implementados en la biblioteca debido al hecho de que (sic) lograr la robustez de punto flotante implica un conjunto diferente de algoritmos y, en general, supuestos específicos de la plataforma sobre representaciones de punto flotante.

Al principio pensé que era un problema entre la representación exacta e inexacta, así que traté de que funcionara con tipos racionales (Boost Rational) (descubrí una clase racional de envoltura para que se compilara), pero en realidad las coordenadas enteras son un requisito estricto (Hay partes en el código que realmente suman y restan una para construir resultados intermedios).

Volviendo a los enteros, tuve que hacer las coordenadas muy grandes (en términos enteros) para hacer que este problema de discreción desapareciera. En otras palabras, tengo que normalizar todo de un lado a otro. Bueno, al final no es muy útil o conveniente como originalmente pensé.

¿Me estoy perdiendo algo importante sobre el uso de esta biblioteca?

¿Esta biblioteca está destinada a problemas "pixelados"? ¿Cuál es la utilidad si las coordenadas están restringidas a ser enteros?

¿Es la idea escalar las coordenadas a números muy grandes y luego volver a formalizar los resultados para aplicaciones geométricas?

Entiendo que la Geometría Computacional con puntos flotantes es muy dolorosa,pero ¿por qué esta biblioteca ni siquiera trata de ser compatible con los racionales exactos?

¿Hay ejemplos reales de uso? (El manual es bastante malo para dar ejemplos)¿Alguien está realmente usando esta biblioteca?

Pregunta extra:¿Es esta una biblioteca abandonada?

Este es un ejemplo de cómo se comporta la biblioteca desde las coordenadas enteras:

Aquí es un ejemplo de lo que sucede con los polígonos integrales. Si uso números pequeños para representar las coordenadas, los resultados ni siquiera son geométricamente consistentes. (Los dos polígonos sonpolygon(-2,0)(2,-2)(6,4)(0,2) ypolygon(-5,0)(-1,-2)(3,4)(-3,2))

(tenga en cuenta lo sesgado que sale todo).

Pero cuando escalo los polígonos para tener coordenadas enteras grandes, los resultados se vuelven más exactos (los dos polígonos sonpolygon(-200,0)(200,-200)(600,400)(0,200) ypolygon(-500,0)(-100,-200)(300,400)(-300,200), versiones a escala de los dos anteriores.):

EDITAR: Aprendí un poco más de geometría computacional, aparentemente la robustez de la geometría computacional es un problema muy difícil. Una de las estrategias es usar aritmética de enteros. Parece Boost.Polygon adopta este enfoque. Los problemas en el espacio continuo deben escalarse adecuadamente.

Respuestas a la pregunta(1)

Su respuesta a la pregunta