boost::qvm 使用示例
boost::qvm (Quaternions, Vectors and Matrices) 是 Boost 库中的一个组件,专门用于处理向量、矩阵和四元数运算。以下是几个常见的使用示例:
基本向量操作
#include <boost/qvm/vec.hpp>
#include <boost/qvm/vec_operations.hpp>
#include <iostream>
int main() {
using namespace boost::qvm;
// 创建3D向量
vec<float, 3> v1 = {1.0f, 2.0f, 3.0f};
vec<float, 3> v2 = {4.0f, 5.0f, 6.0f};
// 向量加法
auto v3 = v1 + v2;
// 点积
float dot_product = dot(v1, v2);
// 叉积 (仅适用于3D向量)
auto cross_product = cross(v1, v2);
// 标量乘法
auto v4 = v1 * 2.0f;
// 向量归一化
auto normalized = normalize(v1);
std::cout << "v1 + v2: " << v3.a[0] << ", " << v3.a[1] << ", " << v3.a[2] << "\n";
std::cout << "Dot product: " << dot_product << "\n";
std::cout << "Cross product: " << cross_product.a[0] << ", "
<< cross_product.a[1] << ", " << cross_product.a[2] << "\n";
return 0;
}
矩阵操作
#include <boost/qvm/mat.hpp>
#include <boost/qvm/mat_operations.hpp>
#include <iostream>
int main() {
using namespace boost::qvm;
// 创建3x3矩阵
mat<float, 3, 3> m1 = {
1.0f, 2.0f, 3.0f,
4.0f, 5.0f, 6.0f,
7.0f, 8.0f, 9.0f
};
mat<float, 3, 3> m2 = {
9.0f, 8.0f, 7.0f,
6.0f, 5.0f, 4.0f,
3.0f, 2.0f, 1.0f
};
// 矩阵加法
auto m3 = m1 + m2;
// 矩阵乘法
auto m4 = m1 * m2;
// 矩阵转置
auto transposed = transpose(m1);
// 矩阵-向量乘法
vec<float, 3> v = {1.0f, 0.0f, 0.0f};
auto transformed = m1 * v;
std::cout << "Matrix multiplication result:\n";
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
std::cout << m4.a[i][j] << " ";
}
std::cout << "\n";
}
return 0;
}
四元数操作
#include <boost/qvm/quat.hpp>
#include <boost/qvm/quat_operations.hpp>
#include <iostream>
int main() {
using namespace boost::qvm;
// 创建四元数
quat<float> q1 = rot_quat(45.0f * 3.14159f/180.0f, vec<float,3>{1.0f, 0.0f, 0.0f});
quat<float> q2 = rot_quat(30.0f * 3.14159f/180.0f, vec<float,3>{0.0f, 1.0f, 0.0f});
// 四元数乘法 (表示旋转的组合)
auto q3 = q1 * q2;
// 四元数共轭
auto conjugate_q = conjugate(q1);
// 用四元数旋转向量
vec<float, 3> v = {0.0f, 0.0f, 1.0f};
auto rotated_v = q1 * v;
std::cout << "Rotated vector: " << rotated_v.a[0] << ", "
<< rotated_v.a[1] << ", " << rotated_v.a[2] << "\n";
return 0;
}
更高级的用法 - 变换矩阵
#include <boost/qvm/mat.hpp>
#include <boost/qvm/mat_operations.hpp>
#include <boost/qvm/mat_access.hpp>
#include <iostream>
int main() {
using namespace boost::qvm;
// 创建4x4单位矩阵 (常用于3D图形变换)
mat<float, 4, 4> transform = identity_mat<float, 4>();
// 设置平移分量
A<0,3>(transform) = 10.0f; // X平移
A<1,3>(transform) = 5.0f; // Y平移
A<2,3>(transform) = 2.0f; // Z平移
// 创建缩放矩阵
mat<float, 4, 4> scale = identity_mat<float, 4>();
A<0,0>(scale) = 2.0f; // X缩放
A<1,1>(scale) = 2.0f; // Y缩放
A<2,2>(scale) = 2.0f; // Z缩放
// 组合变换
auto final_transform = transform * scale;
// 变换点
vec<float, 4> point = {1.0f, 1.0f, 1.0f, 1.0f}; // 齐次坐标
auto transformed_point = final_transform * point;
std::cout << "Transformed point: "
<< transformed_point.a[0] << ", "
<< transformed_point.a[1] << ", "
<< transformed_point.a[2] << "\n";
return 0;
}
编译说明
使用 boost::qvm 需要链接 Boost 库。典型的编译命令可能如下:
g++ -std=c++11 your_program.cpp -I/path/to/boost -o your_program
注意:
- boost::qvm 是 header-only 的,不需要链接库文件
- 需要包含正确的头文件路径
- 推荐使用 C++11 或更高标准
boost::qvm 提供了高效且类型安全的向量、矩阵和四元数运算,非常适合图形编程、物理模拟和机器人学等领域。