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)

使用指定的策略计算几何图形的面积
在这里插入图片描述

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中
在这里插入图片描述

3.4 buffer

3.4.1 buffer

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

3.4.2 return_buffer

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

3.5 centroid

3.5.1 centroid

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

3.5.2 return_centroid

使用指定的策略计算几何图形的质心。这两个求质心的方式类似。
在这里插入图片描述

3.6 clear

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

3.7 convert

将一个几何图形转换为另一个几何图元
在这里插入图片描述

3.8 convex_hull

计算几何体的凸包
在这里插入图片描述
在这里插入图片描述

3.9 correct

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

3.10 covered_by

使用指定的策略检查第一个几何图形是否位于第二个几何图形的内部或边界上
在这里插入图片描述

3.11 crosses

检查两个几何图形是否相交
在这里插入图片描述

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

检查两个几何图形是否不相交
在这里插入图片描述

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)
在这里插入图片描述

3.18.2 return_envelope

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

3.19 equals

检查几何体在空间上是否相等
在这里插入图片描述

3.20 expand

使用长方体来框选多个几何图形(长方体、点)的边界框

3.21 for_each

3.21.1 for_each_point

将函数f应用于每个点

3.21.2 for_each_segment

将函数f应用于每个segment

3.22 intersection

计算两个几何图形的交点
在这里插入图片描述

3.23 intersects

检查几何图形是否至少有一个交点(相交或自相切)

3.24 is_empty

检查几何图形是否为空集

3.25 is_simple

检查几何图形是否简单
在这里插入图片描述

3.26 is_valid

检查几何图形是否有效(在OGC意义上)

3.27 length

函数长度计算几何体的长度(连续点之间的距离之和)。它使用基于几何体坐标系的默认策略。

3.28 line_interpolate

返回沿LineString方向插值的一个或多个点

3.29 make

3.29.1 make

构造几何图形

3.29.2 make_inverse

用逆无穷坐标构造一个长方体

3.29.3 make_zero

构造一个坐标初始化为零的几何体

3.30 num_geometries

计算几何图形的几何图形数

3.31 num_interior_rings

计算几何图形的内解多边形数

3.32 num_points

计算几何图形的点数

3.33 num_segments

计算几何图形的线段数(segments)

3.34 overlaps

检查两个几何图形是否重叠

3.35 perimeter

计算几何图形的周长

3.36 relate

检查由遮罩定义的一对几何图形之间的关系
在这里插入图片描述

3.37 relation

计算DE-9IM中定义的一对几何图形之间的关系
在这里插入图片描述

3.38 reverse

反转几何图形中的点

3.39 simplify

简化几何图形
在这里插入图片描述

3.40 sym_difference

计算两种几何体的对称差

total: 3.1459
0: 0.02375
1: 0.542951
2: 0.0149697
3: 0.226855
4: 0.839424
5: 0.525154
6: 0.015
7: 0.181136
8: 0.128798
9: 0.340083
10: 0.307778
在这里插入图片描述

3.41 touches

检查几何图形是否至少有一个接触点(自相切)
在这里插入图片描述

3.42 transform

使用策略从一个几何图形转换到另一个几何图元

3.43 union_

组合两个相互关联的几何图形
在这里插入图片描述

3.44 unique

计算几何图形的最小集

3.45 within

检查第一个几何体是否完全位于第二个几何体内部
在这里插入图片描述

4. 参考链接

https://www.boost.org/doc/libs/1_73_0/libs/geometry/doc/html/geometry/reference.html