当前位置: 首页 > news >正文

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)

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

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

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

…详情请参照古月居

相关文章:

  • wordpress 更好 知乎/上海官网seo
  • java做网站自定义布局多大/百度助手下载安装
  • wordpress 主题大学/潍坊seo培训
  • 怎么在微信上做网站/网店代运营合同
  • 网站建设与管理实训心得体会/石家庄百度快速排名优化
  • 桂林创新大厦网站/seo搜索排名影响因素主要有
  • 4、MySQL数据管理
  • 谈谈测试员的地位:此刻,我想为所有从事测试职业的人发声…
  • DBCO-PEG12-Maleimide,DBCO-PEG12-Mal具有DBCO和Maleimide巯基反应试剂
  • 在Spring Boot项目中使用统一返回结果
  • 249 - 数据流
  • 程序员日均写7行代码被开除,这个行业真的还是普通人的最优选吗
  • NVIDIA VPI架构解析
  • 在字节跳动干了3年测试开发,30岁即将退休的我,告诉你软件测试的真实就业前景
  • 【计算机毕业设计】Java 基于微信小程序的高校游泳馆管理系统
  • JVM的组成
  • pyqt5的安装
  • springmvc参数解析