Qual é a utilidade do Boost Polygon?

Esta é uma pergunta sobre o Boost Polygon (não sobre o Boost Geometry)

Recentemente, eu estava tentando brincar com algumas construções geométricas de polígonos. Desde aGeometria de impulso (umadiferente biblioteca que também lida com polígonos) não está funcionando circunstancialmente no Boost 1.58, embora eu tentassePolígono de impulso.

Depois de tentar entender a biblioteca e não obter os resultados esperados, descobri que a biblioteca funciona apenas para coordenadas inteiras. No começo, pensei que isso era uma limitação para entrada, mas, na verdade, todas as operações e saídas internas são números inteiros, isso torna toda a saída bastante peculiar, por exemplo, as interseções para polígonos são ligeiramente deformadas (porque as coordenadas dos vértices precisam ser inteiros )

Uma citação da página principal (ênfase minha):

O tipo de dados de coordenadas é um parâmetro de modelo de todos os tipos de dados e algoritmos fornecidos pela biblioteca eé esperado para ser integral. Os tipos de dados de coordenadas de ponto flutuante não são suportados pelos algoritmos implementados na biblioteca devido ao fato de que a (sic) alcançar robustez de ponto flutuante implica um conjunto diferente de algoritmos e geralmente suposições específicas da plataforma sobre representações de ponto flutuante.

No começo, eu pensei que era um problema entre representação exata e inexata, então tentei fazê-la funcionar com tipos racionais (Boost Rational) (eu descobri uma classe racional de wrapper para compilar), mas na verdade as coordenadas inteiras são um requisito estrito (Existem partes no código que realmente adicionam e subtraem uma para construir resultados intermediários).

Voltando aos números inteiros, tive que tornar as coordenadas muito grandes (em termos de números inteiros) para fazer desaparecer esse problema de discrição. Em outras palavras, tenho que normalizar tudo de um lado para o outro. Bem, no final, não é muito útil ou conveniente, como eu pensava originalmente.

Estou perdendo algo importante sobre o uso desta biblioteca?

Esta biblioteca é destinada a problemas "pixelizados"? Qual é a utilidade se as coordenadas estiverem restritas a serem números inteiros?

A ideia é dimensionar as coordenadas para números muito grandes e depois renormalizar os resultados posteriormente para aplicações geométricas?

Eu entendo que a geometria computacional com pontos flutuantes é muito dolorosa,mas por que essa biblioteca nem tenta ser compatível com os racionais exatos?

Existem exemplos reais de uso? (O manual é muito ruim em dar exemplos)Alguém está realmente usando esta biblioteca?

Pergunta bônus:Esta é uma biblioteca abandonada?

Este é um exemplo de como a biblioteca se comporta a partir das coordenadas inteiras:

Aqui está um exemplo do que acontece com polígonos integrais. Se eu usar números pequenos para representar as coordenadas, os resultados não serão geometricamente consistentes. (Os dois polígonos sãopolygon(-2,0)(2,-2)(6,4)(0,2) epolygon(-5,0)(-1,-2)(3,4)(-3,2))

(observe como tudo sai distorcido.)

Mas quando dimensiono os polígonos para ter coordenadas inteiras grandes, os resultados ficam mais exatos (os dois polígonos sãopolygon(-200,0)(200,-200)(600,400)(0,200) epolygon(-500,0)(-100,-200)(300,400)(-300,200), versões em escala dos dois acima.):

Edição: Eu aprendi um pouco mais de geometria computacional, aparentemente a robustez da geometria computacional é um problema muito difícil. Uma das estratégias é usar aritmética inteira. Parece que o Boost.Polygon adota essa abordagem. Os problemas no espaço contínuo devem ser dimensionados adequadamente.

questionAnswers(1)

yourAnswerToTheQuestion