boost::qvm 使用示例
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 提供了高效且类型安全的向量、矩阵和四元数运算,非常适合图形编程、物理模拟和机器人学等领域。