Boost Polygon的用途是什么?

时间:2015-07-15 04:36:31

标签: c++ boost boost-polygon

这是关于Boost Polygon(不是关于Boost几何)的问题

最近我试图玩一些几何多边形结构。由于Boost Geometry(一个不同的库也处理多边形)在Boost 1.58中没有起作用,我会尝试Boost Polygon

在尝试理解库并且没有得到预期的结果后,我发现该库仅适用于整数坐标。起初我虽然这是输入的限制,但事实上所有内部操作和输出是整数,这使得所有输出都非常古怪,例如,多边形的交点稍微变形(因为顶点的坐标必须是整数)。

主页上的引文(强调我的):

  

坐标数据类型是所有数据类型的模板参数   库提供的算法,预计是完整的。   不支持浮点坐标数据类型   由于(原文如此)在库中实现的算法   实现浮点健壮性意味着一组不同的   关于浮动的算法和一般平台特定的假设   点表示。

起初我认为这是精确和不精确表示之间的问题所以我试图使它与Rational(Boost Rational)类型一起工作(我想出了一个包装器有理类来使它编译)但实际上整数坐标是严格要求(代码中有部分实际添加和减去一个构造中间结果)。

回到整数,我不得不使坐标非常大(以整数表示),以使这个离散问题消失。换句话说,我必须来回规范化一切。好吧,最后它不像我原先想的那样有用或方便。

我是否遗漏了使用此库的重要信息?

这个图书馆是否用于"像素化"问题?如果坐标限制为整数,有什么用处?

想法是将坐标缩放到非常大的数字,然后在几何应用中重新归一化结果吗?

我知道带有浮点的计算几何是非常痛苦的,但是为什么这个库甚至不能尝试与精确的理性兼容?

是否有真正的使用示例?(手册中的示例非常糟糕)是否有人真正使用此库?

奖金问题:这是一个废弃的图书馆吗?

这是一个库如何从整数坐标行为的示例:

这里是整数多边形的一个例子,如果我使用小数来表示坐标,结果甚至几何上都不一致。 (这两个多边形是polygon(-2,0)(2,-2)(6,4)(0,2)polygon(-5,0)(-1,-2)(3,4)(-3,2)

smallints

(注意一切都会出现偏差。)

但是,当我将多边形缩放为具有大整数坐标时,结果会更精确(两个多边形是polygon(-200,0)(200,-200)(600,400)(0,200)polygon(-500,0)(-100,-200)(300,400)(-300,200),上面两个的缩放版本。):

largeints

编辑:我学到了更多的计算几何,显然计算几何的稳健性是一个非常困难的问题。其中一个策略是使用整数运算。看起来像Boost.Polygon采用这种方法。连续空间中的问题应该适当缩放。

2 个答案:

答案 0 :(得分:3)

它没有被抛弃。

是的,它被(很多)人使用。

它做的一件事似乎具有可靠的用户群,例如Voronoi图和相关算法。你也可以在SO上找到很多关于这个的问题,所以你可以去看看他们用它做什么。

奖励回答

您甚至可以使用

组合库
#include <boost/geometry/geometries/adapted/boost_polygon.hpp>

答案 1 :(得分:1)

由于接受的答案已有 6 年的历史,我认为值得指出的是,虽然该库并未完全废弃,但它肯定会朝着这个方向发展,并且处于维护模式。

在撰写本文时,最近的合并拉取请求已超过 1 年。