0
点赞
收藏
分享

微信扫一扫

SLAM本质剖析-Boost之Geometry函数大全(一)


0. 简介

boost作为C++中最常用的第三方库,很多SLAMer都在使用Geometry中的库。Geometry库里面拥有大量的开源算法。可以省去大量的重复造轮子的时间。虽然有《Boost程序库完全开发指南》这系列的书来学习Boost中的时间与日期、内存管理、工具类、字符串与文本处理、正确性测试、容器与数据结构、数学与数字、操作系统相关、回调函数、并发编程、设计模式这11个主要的部分。但是Geometry这部分国内缺少相关系列的介绍。所以作者希望可以对这部分形成目录。来作为之前《​​SLAM本质剖析-Boost​​》的补充与阐述。

1. 访问功能

1.1 get

1.1.1 get

该函数通常用于获取几何图形(通常为点)的坐标值

1.1.2 get (with index)

获取框或段的坐标值

1.2 set

1.2.1 set

设置几何图形(通常为点)的坐标值

1.2.2 set (with index)

设置Box / Segment的坐标值

1.3 exterior_ring

该函数用于获取多边形的外接多边形

bg::model::polygon<point> poly;
bg::exterior_ring(poly) = boost::assign::tuple_list_of(0, 0)(0, 3)(3, 3)(3, 0)(0, 0);

1.4 interior_rings

该函数用于获取多边形的内接多边形

bg::model::polygon<point> poly;
bg::interior_rings(poly) = boost::assign::tuple_list_of(0, 0)(0, 3)(3, 3)(3, 0)(0, 0);

2. 适应模型

2.1 C array

C arrays被用来处理Boost.Geometry中点之间的关系,因为C数组不能是字符串或多边形的点类型。

2.2 C++11 Array Container

C++11数组容器适用于Boost。几何点概念。std::array可以是模型linestring、polygon、segment、box和ring这些点类型。

2.3 Boost.Array

Boost.Array 可以被适用于 Boost.Geometry中不同的点类型

2.4 Boost.Fusion

Boost.Fusion 可以自定义不同的点的结构并适配 Boost.Geometry点的处理方法,因此,它们可以调用许多Boost.Geometry算法。

2.5 Boost.Tuple

Boost.Tuple组成的点集也可以使用算术运算,元素可以用作 Boost.Geometry 内部的点,相比于

2.6 Boost.Polygon

2.6.1 point_data

Boost.Polygon点类型(boost::polygon::point_data)符合Boost.Geometry几何点概念。可以代替C array和C++11 Array这类的点的表现形式。所以在使用时候,可以使用Boost.Polygon库和Boost.Geometry库中的方法。

2.6.2 rectangle_data

Boost.Polygon矩形类型(boost::polygon::rectangle_data)符合Boost.Geometry几何点概念

2.6.3 polygon_data

Boost.Polygon多边形类型(boost::polygon::polygon_data)适用于符合Boost.Geometry多边形的概念

2.6.4 polygon_with_holes_data

Boost.Polygon多边形类型(boost::polygon::polygon_with_holes_data)适用于符合Boost.Geometry多边形的概念

2.7 Boost.Range

2.7.1 filtered

Boost.Range filtered被用于过滤不符合条件的数据

2.7.2 reversed

Boost.Range reversed被用于反转的数据

2.7.3 sliced

Boost.Range sliced被用于指定在数据中切出一定部分的数据

2.7.4 strided

Boost.Range strided 被用于指定在数据以n为步长间接取值

2.8 BOOST_GEOMETRY_REGISTER

下面这些为注册类型,分别是BOX,LINESTRING,POINT,POLYGON,RING这些函数的自定义。一般这部分不会经常使用,所以我们就不专门讲述这个问题了。

BOOST_GEOMETRY_REGISTER_BOX
BOOST_GEOMETRY_REGISTER_BOX_2D_4VALUES
BOOST_GEOMETRY_REGISTER_BOX_TEMPLATED
BOOST_GEOMETRY_REGISTER_LINESTRING
BOOST_GEOMETRY_REGISTER_LINESTRING_TEMPLATED
BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING
BOOST_GEOMETRY_REGISTER_MULTI_LINESTRING_TEMPLATED
BOOST_GEOMETRY_REGISTER_MULTI_POINT
BOOST_GEOMETRY_REGISTER_MULTI_POINT_TEMPLATED
BOOST_GEOMETRY_REGISTER_MULTI_POLYGON
BOOST_GEOMETRY_REGISTER_MULTI_POLYGON_TEMPLATED
BOOST_GEOMETRY_REGISTER_POINT_2D
BOOST_GEOMETRY_REGISTER_POINT_2D_CONST
BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET
BOOST_GEOMETRY_REGISTER_POINT_3D
BOOST_GEOMETRY_REGISTER_POINT_3D_CONST
BOOST_GEOMETRY_REGISTER_POINT_3D_GET_SET
BOOST_GEOMETRY_REGISTER_RING
BOOST_GEOMETRY_REGISTER_RING_TEMPLATED

3. 算法部分

3.1 area

3.1.1 ​​area​​

计算几何图形的面积

3.1.2 ​​area (with strategy)​​

使用指定的策略计算几何图形的面积

SLAM本质剖析-Boost之Geometry函数大全(一)_数据

3.2 assign

3.2.1 ​​assign​​

将一个几何图形指定给另一个几何图元

3.2.2 ​​assign_inverse​​

这属于一个不常用的用法,利用assign_ inverse和expand方便地确定两点的边界三维框

3.2.3 ​​assign_points​​

为 linestring, ring 或 polygon指定一系列点

3.2.4 ​​assign_values​​

为几何图形指定两个坐标(通常为二维点,三维点和四维点这三种情况)

3.2.5 ​​assign_zero​​

assign_zero函数初始化坐标为零的二维或三维点或框

3.3 append

将一个或多个点附加到linestring, ring, polygon, multi-geometry中

SLAM本质剖析-Boost之Geometry函数大全(一)_计算几何_02

3.4 buffer

3.4.1 ​​buffer​​

自由函数缓冲区计算几何体的缓冲区(多边形是距离几何体指定最大距离内的空间点集集合)。下图显示了策略在生成的缓冲区中的作用

SLAM本质剖析-Boost之Geometry函数大全(一)_计算几何_03


SLAM本质剖析-Boost之Geometry函数大全(一)_c++_04

3.4.2 ​​return_buffer​​

return_ buffer函数计算几何体的缓冲区(多边形是距离几何体指定最大距离内的空间点集集合)。这个带有return_前缀的版本返回缓冲区,因此必须在调用中指定模板参数。这个个人感觉功能性没有buffer好

3.5 centroid

3.5.1 ​​centroid​​

使用指定的策略计算几何图形的质心

3.5.2 ​​return_centroid​​

使用指定的策略计算几何图形的质心。这两个求质心的方式类似。

SLAM本质剖析-Boost之Geometry函数大全(一)_python_05

3.6 ​​clear​​

清除 linestring, ring 或者 polygon (exterior+interiors) 和 multi*

3.7 ​​convert​​

将一个几何图形转换为另一个几何图元

SLAM本质剖析-Boost之Geometry函数大全(一)_c++_06

3.8 ​​convex_hull​​

计算几何体的凸包

SLAM本质剖析-Boost之Geometry函数大全(一)_计算几何_07


SLAM本质剖析-Boost之Geometry函数大全(一)_c++_08

3.9 ​​correct​​

纠正几何图形:所有相对于其预期方向错误定向的环都将反转。对于所有没有闭点且按其应有类型键入的环,将附加第一个点。也可以校正框。

SLAM本质剖析-Boost之Geometry函数大全(一)_python_09

3.10 ​​covered_by​​

使用指定的策略检查第一个几何图形是否位于第二个几何图形的内部或边界上

SLAM本质剖析-Boost之Geometry函数大全(一)_c++_10

3.11 ​​crosses​​

检查两个几何图形是否相交

SLAM本质剖析-Boost之Geometry函数大全(一)_算法_11

3.12 ​​densify​​

使用指定的策略加密几何体

3.13 ​​difference​​

计算两种几何图形的差异.通过差分计算两种几何的空间集合论差分

3.14 ​​discrete_frechet_distance​​

使用指定的策略计算两个几何图形之间的离散Frechet距离(目前适用于LineString)

3.15 ​​discrete_hausdorff_distance​​

使用指定的策略计算两个几何图形之间的离散Hausdorff距离(目前适用于 LineString-LineString, MultiPoint-MultiPoint, Point-MultiPoint, MultiLineString-MultiLineString)

3.16 ​​disjoint​​

检查两个几何图形是否不相交

SLAM本质剖析-Boost之Geometry函数大全(一)_c++_12

3.17 distance

3.17.1 ​​comparable_distance​​

使用指定的策略计算两个几何图形的可比距离测量值,点在多边形内部,可以使用comparable_distance

double cmpDst = boost::geometry::comparable_distance(segment,pt);

3.17.2 ​​distance​​

使用指定的策略计算两个几何图形之间的距离。distance可以正确处理多边形外部的点,但是似乎将多边形视为实体。因此,多边形内的每个点到多边形的距离显然为0。

double cmpDst = boost::geometry::distance(segment,pt);

3.18 envelope

3.18.1 ​​envelope​​

自由函数包络计算几何体的包络(也称为轴对齐边界框、aabb或最小边界矩形、mbr)

SLAM本质剖析-Boost之Geometry函数大全(一)_计算几何_13

3.18.2 ​​return_envelope​​

自由函数return_envelope计算几何体的包络(也称为轴对齐边界框、aabb或最小边界矩形、mbr)。这个带有return_前缀的版本返回信封,因此必须在调用中指定模板参数

3.19 ​​equals​​

检查几何体在空间上是否相等

…详情请参照​​古月居​​


举报

相关推荐

0 条评论