@devilogic
2020-05-07T20:11:27.000000Z
字数 2269
阅读 858
我的无人车之路
mymath
支撑工具库提供了一些基本通用的数学运算函数,为其他的工具做底层支持。
函数 | 说明 |
---|---|
sqr |
计算x 的平方。 |
inner_prod |
计算两个向量的内积。 |
inner_prod (三端点版本) |
计算两个向量的内积,两个向量同一个起点。 |
cross_prod |
计算两个向量的外积。 |
cross_prod (三端点版本) |
计算两个向量的外积。两个向量同一个起点。 |
wrap_angle |
将角度缩放到内的同样的角度内,如果角度为负则求出它相同的正值。(弧度制) |
normalize_angle |
将角度标准化到内。 |
angle_diff |
计算两角度之间的差距,并正则化到之间。 |
sigmoid |
sigmoid函数。 |
square (模板函数) |
计算两个模板类型值的平方。 |
clamp (模板函数) |
如果参数value小于参数bound1则返回参数bound1,如果大于参数bound2则返回参数bound2,否则返回参数value。 |
rotate_axis |
将轴1中的点转换为轴2中的点,其中从轴1到轴2的逆时针旋转角度为。 |
rfu_to_flu |
转换RFU到FLU。 |
flu_to_rfu |
转换FLU到RFU。 |
l2_norm |
计算维的向量的L2范数。 |
random_int |
生成随机整数。 |
random_double |
生成随机浮点数。 |
gaussian |
生成高斯分布随机数。 |
上述函数表中提供了两个在图像变换中常用的向量操作,一个是点乘,一个是叉乘。都提供了两个版本,一个是两个独立的向量。另外一个版本是两个向量拥有同一个起点,终点不同。
向量的点乘,也叫向量的内积、数量积,对两个向量执行点乘运算,就是对这两个向量对应位一一相乘之后求和的操作,点乘的结果是一个标量。
对于向量与向量:
再探讨一下点乘的几何意义,点乘的几何意义是可以用来表征或计算两个向量之间的夹角,以及在向量在向量方向上的投影,有公式:
两个向量的叉乘,又叫向量积、外积、叉积,叉乘的运算结果是一个向量而不是一个标量。并且两个向量的叉积与这两个向量组成的坐标平面垂直。
对于向量与向量:
在三维几何中,向量a和向量b的叉乘结果是一个向量,更为熟知的叫法是法向量,该向量垂直于和向量构成的平面。在3D图像学中,叉乘的概念非常有用,可以通过两个向量的叉乘,生成第三个垂直于,的法向量,从而构建坐标系。
在二维空间中,叉乘还有另外一个几何意义就是:等于由向量和向量构成的平行四边形的面积。
工具库中提供了RFU与FLU的相互转换。
inline std::pair<double, double> rfu_to_flu(const double x, const double y) {
return std::make_pair(y, -x);
}
inline std::pair<double, double> flu_to_rfu(const double x, const double y) {
return std::make_pair(-y, x);
}