问题标签 [boost-polygon]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
45 浏览

c++ - Boost/Voronoi - 无法在类中创建 voronoi_diagram,可以在函数中创建

我试图把这个:

...在我的课堂上,但我收到此错误:

如果我改为在函数体中声明它,我不会收到此错误。

0 投票
3 回答
2452 浏览

c++ - How to split a general closed polygon by a line segment

I need a good (robust) algorithm for splitting a polygon into two sets(left/right) by a line segment. My polygon representation is simply a list of integer coordinates(ordered clock wise, never self intersecting) and the line segment is represented by a start and end point. The line always starts and ends outside the polygon, i.e. intersects the polygon an even number of times.

Here is an example:

The polygon should be split into two sets of two polygons each.

The output of the algorithm should be the two sets(travelling clock wise):

  • Left: HABCH, FGDEF
  • Right: HCDGH, BAB, FEF

I can identify the points A-H by iterating the polygon and checking if a polygon segment crosses the line, taking care to respect border cases. I can also determine which side each multi-line belongs to. I cannot though, for the life of me, decide how to string these segment together.

Before you suggest a general purpose clipping library: I am using boost polygon which is very good at clipping polygons against each other, but I haven't found any library which let's you clip a polygon against a line segment and it is not possible in general to turn the line segment into a polygon which I could clip with.

EDIT: I had missed FEF and the fact that a polygon can have parts on both sides of the line segment.

0 投票
1 回答
840 浏览

c++ - 使用 Boost:Polygon:get_rectangles

我在使用 boost get_rectangles 函数时遇到问题我已经看到了在 stackoverflow 上使用它的示例,但是我无法让它工作。

这是我正在使用的代码,我正在使用带有 boost 库 1.57 的 Visual Studio 2013

我得到的错误是

0 投票
2 回答
158 浏览

c++ - 给定一组点,使用 voroni 近似将空间分割成多边形区域

我正在尝试将空间划分为一组多边形,其中每个多边形大约是一组输入点中的一个的 voroni 单元。

我试图为此目的使用 Boost::Voroni,但是使用这个库的输出很复杂,需要付出很多额外的努力才能得到我想要的。

我想知道是否有人知道从 BOOST::voroni 图中得到我想要的东西的最佳方法,或者是否有人知道一个比可以直接让我得到我想要的东西的更简单的库?

这是一些显示我正在尝试做的代码,

因为 boost 对于我的需求来说过于笼统和复杂,所以我更喜欢一个库或算法来简单地完成所有这些,只返回多边形集。我有哪些选择?

0 投票
0 回答
137 浏览

c++ - set 不是 boost::PolygonSet 的成员

我正在尝试为 PolygonSet 重载 & 运算符,但以以下错误结束。我可以理解 boost::PolygonSet 没有设置功能,但任何人都可以为我提供解决此问题的输入。我试过 view_as 但没有成功。

编码:

错误

错误:'struct boost::enable_if, boost::polygon::point_data >'中没有​​名为'type'的类型</p>

编译期间的消息

/u/logic/depot/boost_1_57_0/include/boost/polygon/detail/polygon_set_view.hpp:198:5: 来自'geometry_type_1& boost::polygon::self_assignment_boolean_op(geometry_type_1&, const geometry_type_2&) [with geometry_type_1 = std::vector ; geometry_type_2 = boost_geom_api::PolygonSet; int op_type = 1]' /u/logic/depot/boost_1_57_0/include/boost/polygon/polygon_set_concept.hpp:419:90: 来自'typename boost::enable_if::type, typename boost::polygon::is_any_polygon_set_type: :type>::type, geometry_type_1>::type& boost::polygon::operators::operator&=(geometry_type_1&, const geometry_type_2&) [with geometry_type_1 = std::vector; geometry_type_2 = boost_geom_api::PolygonSet; 类型名 boost::enable_if

boost::polygon::is_mutable_polygon_set_type::type, 类型名 boost::polygon::is_any_polygon_set_type::type>::type, geometry_type_1>::type = std::vector]' /polygon_set.cpp:160:13: 需要来自这里/u/logic/depot/boost_1_57_0/include/boost/polygon/polygon_90_set_traits.hpp:57:51:错误:'boost::polygon::get_coordinate_type::traits_type {aka struct boost::多边形::polygon_set_traits}'</p>

'typename boost::enable_if::type, typename boost::polygon::is_any_polygon_set_type::type>::type, geometry_type_1>::type& boost::polygon::operators::operator&=(geometry_type_1&, const geometry_type_2&) [与 geometry_type_1 = std::vector; geometry_type_2 = std::vector; 类型名 boost::enable_if::type, 类型名 boost::polygon::is_any_polygon_set_type::type>::type, geometry_type_1>::type = std::vector]'</p>

0 投票
1 回答
175 浏览

c++ - view_as 在 Boost Polygon 库中使用

谁能指导我如何view_as使用。或者也许是 boost 多边形库中的一个例子?

在文档中,提到我们可以从一个类型转换到另一个类型。

http://www.boost.org/doc/libs/1_58_0/libs/polygon/doc/gtl_polygon_90_concept.htm

0 投票
3 回答
2831 浏览

c++ - Boost Polygon 的用途是什么?

这是一个关于 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),是上述两个的缩放版本。):

大整数


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

0 投票
1 回答
7280 浏览

c++ - 带boost的多边形相交

我正在尝试使用 Boost Polygon 库使两个多边形相交。我从 boost 网站提出的 custom_polygon 示例开始:

http://www.boost.org/doc/libs/1_59_0/libs/polygon/doc/gtl_custom_polygon.htm

在 test_polygon 函数中,我填充了两个多边形。我的问题是是否可以用 poly1 和 poly2 调用交集函数。如果我编译我有一个很长的错误列表。

0 投票
0 回答
340 浏览

c++ - 如何迭代Boost.polygon中的多边形点(在polygon_set_data中)?

如何迭代 a 的点polygon_set_data

polygon_set_data可以通过使用来获取 a 中的多边形void get(output_container& output) const,然后使用结果来迭代以下示例中的点,但这会修改​​集合,我希望保持不变。

polygon_set_data也可以用它的方法迭代 a 的边begin(),但边没有排序。

0 投票
0 回答
1056 浏览

c++ - 如何使用 Boost.polygon 合并多个多边形?

我想用 Boost.polygon 将一个多边形与一组多边形合并。

合并 A、B 和 C

例如,将上图中的多边形 C 合并到集合 (A, B) 将得到以下结果:

结果

我怎样才能做到这一点?

我考虑将每个多边形添加到多边形集 ( polygon_set_data) 中,并在多边形集和要添加的多边形之间执行 XOR 和 AND 操作。

问题是当我想检索我的多边形集的结果时,所有重叠的多边形都被合并,产生一个多边形。