当前位置: 首页 > article >正文

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

注意:

  1. boost::qvm 是 header-only 的,不需要链接库文件
  2. 需要包含正确的头文件路径
  3. 推荐使用 C++11 或更高标准

boost::qvm 提供了高效且类型安全的向量、矩阵和四元数运算,非常适合图形编程、物理模拟和机器人学等领域。

http://www.lryc.cn/news/2402801.html

相关文章:

  • go语言学习 第6章:错误处理
  • VMware 安装 CentOS8详细教程 (附步骤截图)附连接公网、虚拟机yum源等系统配置
  • Editing Language Model-based Knowledge Graph Embeddings
  • 深入了解linux系统—— 进程池
  • JavaScript 原型与原型链:深入理解 __proto__ 和 prototype 的由来与关系
  • 逻辑回归与Softmax
  • vscode .husky/pre-commit: line 4: npx: command not found
  • 光电耦合器:数字时代的隐形守护者
  • FPGA没有使用的IO悬空对漏电流有没有影响
  • 11. vue pinia 和react redux、jotai对比
  • 手机如何防止ip关联?3种低成本方案
  • Pandas和Django的示例Demo
  • 护网行动面试试题(1)
  • 【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE
  • 航道无人机巡检系统
  • 【JVM】Java虚拟机(一)——内存结构
  • 从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)
  • 《Linux运维总结:宝德服务器RAID开启(方式一)》
  • NY118NY120美光固态闪存NY124NY129
  • Odoo 19 路线图(新功能)
  • 基于NXP例程学习CAN UDS刷写流程
  • RNN循环网络:给AI装上“记忆“(superior哥AI系列第5期)
  • Python训练第四十三天
  • 基于有效集MPC控制算法的直线同步电机simulink建模与仿真,MPC使用S函数实现
  • 让敏感数据在流转与存储中始终守护在安全范围
  • 【Linux】find 命令详解及使用示例:递归查找文件和目录
  • Java转Go日记(五十九):参数验证
  • 机器学习与深度学习14-集成学习
  • MySQL数据库表设计与索引优化终极指南
  • 【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码