这是一个有关Boost Polygon(而不是Boost Geometry)的问题。
最近,我尝试进行一些几何多边形构造。由于Boost Geometry(也处理多边形的不同库)在Boost 1.58下不能工作,我想尝试一下Boost Polygon。
在试图理解该库并没有得到预期结果后,我发现该库仅适用于整数坐标。起初,我认为这是输入限制,但实际上所有内部操作和输出都是整数,这使所有输出都很奇怪,例如,多边形的交叉点略微变形(因为顶点的坐标必须是整数)。
主页上的一句话(强调我的):
坐标数据类型是库提供的所有数据类型和算法的模板参数,并且预计为整数。算法中不支持浮点坐标数据类型,因为实现浮点鲁棒性意味着不同的算法集,并且通常基于平台特定的浮点表示的假设。
起初,我认为这是精确和非精确表示之间的问题,因此我尝试使用有理数(Boost Rational)类型使其正常工作(我想出了一个包装器有理类以使其编译),但实际上整数坐标是严格要求的(代码中有些部分实际上会添加和减去一来构建中间结果)。
回到整数,我不得不使坐标非常大(在整数术语中)才能消除这个离散性问题。换句话说,我必须反复标准化所有内容。好吧,最后它并不像我最初想的那么有用或方便。
我是否错过了该库的某些重要用法?
这个库是否专门用于 "像素化" 问题?如果坐标限制为整数,有什么用处?想法是将坐标缩放到很大的数字,然后在几何应用中重新归一化结果吗?
我知道使用浮点数进行计算几何非常痛苦,但是这个库为什么甚至不尝试与精确有理数兼容呢?
有实际使用的真实例子吗?(手册在提供示例方面非常差)是否有人实际使用这个库?
额外问题:这是一个被废弃的库吗?
这是这个库从整数坐标开始表现的示例:
这里有一个整数多边形的示例,如果我使用小数来表示坐标,结果甚至不能在几何上保持一致。(两个多边形是 polygon(-2,0)(2,-2)(6,4)(0,2) 和 polygon(-5,0)(-1,-2)(3,4)(-3,2))
(请注意偏斜的程度。)
但当我将多边形缩放为具有大整数坐标时,结果更加精确(两个多边形是 polygon(-200,0)(200,-200)(600,400)(0,200) 和 polygon(-500,0)(-100,-200)(300,400)(-300,200),是上述两个多边形的缩放版本。)