使用索引几何增强多边形
Posted
技术标签:
【中文标题】使用索引几何增强多边形【英文标题】:Boost Polygon with indexed geometry 【发布时间】:2018-09-05 07:32:14 【问题描述】:我需要在 2D 平面上进行一些多边形计算。通常,isInside 操作。
我找到了 boost::Polygon API,但我的点在一个大数组中。 这就是我所说的索引几何。 见http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-9-vbo-indexing/
所以我最好的方法就是 boost::Polygon 并给它我的数组 + 要使用的点索引。
目标只是不要复制我的数百万个点(因为它们至少被两个多边形共享)。
我不知道 API 是否允许(或者我需要继承我自己的类 :-( )。 也许,有人知道另一个 API(在 boost 或其他内部)。
谢谢
文档
在演示中:https://www.boost.org/doc/libs/1_68_0/libs/geometry/doc/html/geometry/reference/algorithms/within/within_2.html【问题讨论】:
我知道这对您来说可能还不够,但我建议您做两件事: - 如果您使用如此大的数据,那么在将其发送到外部任何地方之前,您可以尝试自己实施一些基本验证,对于您的情况-众所周知,如果来自两个多边形的任何一对线段相交,则“isInside”操作将是错误的,您可以尝试实现intersection check-如果发生任何情况,您知道isInside是错误的-尝试use PgSQL 显示一些代码总是更好。哪怕只是一个简化的例子(SSCCE) 【参考方案1】:Boost Geometry 允许适应用户定义的数据类型。
具体来说,这里适配了C数组:https://www.boost.org/doc/libs/1_68_0/boost/geometry/geometries/adapted/c_array.hpp
我有另一个答案,我展示了如何在结构的直接 C 数组上使用 Boost Geometry 算法(在这种情况下,我使用元组作为点类型键入双关语):How to calculate the convex hull with boost from arrays instead of setting each point separately?(其他答案显示了可能的替代方案如果你能负担得起复制一些数据,那就更容易了)。
相关的算法是:
https://www.boost.org/doc/libs/1_68_0/libs/geometry/doc/html/geometry/reference/algorithms/within.html https://www.boost.org/doc/libs/1_68_0/libs/geometry/doc/html/geometry/reference/algorithms/disjoint.html【讨论】:
我很快就会看到你的链接!但是你回答我的问题:boost 可以做我想要的(没有继承类)。谢谢以上是关于使用索引几何增强多边形的主要内容,如果未能解决你的问题,请参考以下文章
有一个整数矩阵 MxN 如何将它们分组为具有增强几何形状的多边形?