@devilogic
2020-05-07T20:11:06.000000Z
字数 1123
阅读 869
我的无人车之路
mymath
库文件vec2d.hpp是整个库中最基本的单元,因为无人车中经常涉及二维向量的操作。整个数学库以及MyPilot的运算基础都是基于这个实现的。
下面是类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() |
返回向量字符表示。(调试时可用) |
还提供一个函数实现了乘法符号的重载,计算两个向量的乘积。
二维向量旋转角度。只需要使向量乘以二维旋转矩阵即可:
关于正则化,即得到向量的单位长度。这里只需将向量的值除以向量的长度即可。
void normalize() {
const double l = length();
if (l > math_epsilon) {
_x /= l;
_y /= l;
}
}