[关闭]
@devilogic 2020-05-07T12:11:06.000000Z 字数 1123 阅读 580

MyMath数学库(一) - 二维向量

我的无人车之路 mymath


库文件vec2d.hpp是整个库中最基本的单元,因为无人车中经常涉及二维向量的操作。整个数学库以及MyPilot的运算基础都是基于这个实现的。

1.1 函数表

下面是类Vec2d内部一些重要函数的说明。

函数名 说明
Vec2d(x, y) 通过的坐标构造向量。
Vec2d() 默认构造向量。
create_unit_vec2d(angle) 通过给定角度构造。(静态函数)
x() 返回坐标。
y() 返回坐标。
set_x(x) 设置坐标值。
set_y(y) 设置坐标值。
length() 返回向量的长度。
length_square() 返回向量的长度的平方。
angle() 计算向量的夹角(弧度)。
normalize() 正则化向量。
distance_to(other) 计算到其他向量的距离。
distance_square_to(other) 计算到其他向量的距离的平方。
cross_prod(other) 计算到其他向量的叉乘。
inner_prod(other) 计算到其他向量的点乘。
rotate(angle) 将向量逆时针旋转度。
operator+(other) 与其他Vec2d相加。
operator-(other) 与其他Vec2d相减。
operator*(other) 与其他Vec2d相乘。
operator/(other) 与其他Vec2d相除。
operator+=(other) 与其他Vec2d相加并自赋值。
operator-=(other) 与其他Vec2d相减并自赋值。
operator*=(other) 与其他Vec2d相乘并自赋值。
operator/=(other) 与其他Vec2d相除并自赋值。
operator==(other) 与其他Vec2d比较是否相等。
str() 返回向量字符表示。(调试时可用)

还提供一个函数实现了乘法符号的重载,计算两个向量的乘积。

1.2 二维向量旋转

二维向量旋转角度。只需要使向量乘以二维旋转矩阵即可:

1.3 向量正则化

关于正则化,即得到向量的单位长度。这里只需将向量的值除以向量的长度即可。

  1. void normalize() {
  2. const double l = length();
  3. if (l > math_epsilon) {
  4. _x /= l;
  5. _y /= l;
  6. }
  7. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注