boost::qvm 使用示例

news2025/6/7 10:50:28

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.coloradmin.cn/o/2402801.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入了解linux系统—— 进程池

前言&#xff1a; 本篇博客所涉及到的代码以同步到本人gitee&#xff1a;进程池 迟来的grown/linux - 码云 - 开源中国 一、池化技术 在之前的学习中&#xff0c;多多少少都听说过池&#xff0c;例如内存池&#xff0c;线程池等等。 那这些池到底是干什么的呢&#xff1f;池…

光电耦合器:数字时代的隐形守护者

在数字化、自动化高速发展的今天&#xff0c;光电耦合器正以一种低调却不可或缺的方式&#xff0c;悄然改变着我们的生活。它不仅是电子电路中的“安全卫士”&#xff0c;更是连接信号世界的“桥梁”&#xff0c;凭借出色的电气隔离能力&#xff0c;为各类设备提供稳定可靠的信…

手机如何防止ip关联?3种低成本方案

在当今数字化时代&#xff0c;手机已成为人们日常生活中不可或缺的工具&#xff0c;无论是社交、购物、支付还是工作&#xff0c;都离不开手机。然而&#xff0c;随着网络技术的不断发展&#xff0c;网络安全问题也日益突出&#xff0c;其中IP关联问题尤为常见。那么&#xff0…

Pandas和Django的示例Demo

以下是一个结合Pandas和Django的示例Demo&#xff0c;展示如何在Django项目中读取、处理和展示Pandas数据。 Pandas和Django的示例Demo 前置条件&#xff1a; 安装python 基础设置 确保已安装Django和Pandas&#xff1a; pip install django pandasInstalling collected p…

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信拓扑与操作 BR/EDR(经典蓝牙)和 BLE

目录 1. BR/EDR&#xff08;经典蓝牙&#xff09;网络结构微微网&#xff08;Piconet&#xff09;散射网&#xff08;Scatternet&#xff09;蓝牙 BR/EDR 拓扑结构示意图 2. BLE&#xff08;低功耗蓝牙&#xff09;网络结构广播器与观察者&#xff08;Broadcaster and Observer…

航道无人机巡检系统

随着长江干线、京杭运河等航道智慧化升级提速&#xff0c;传统人工巡检模式已难以满足高频次、大范围、高精度的航道管理需求。无人机凭借其灵活机动、多源感知、高效覆盖等优势&#xff0c;正成为航道巡检的“空中卫士”。本文将结合多地成功案例&#xff0c;从选型标准、技术…

【JVM】Java虚拟机(一)——内存结构

目录 一、简介 二、程序计数器 三、虚拟机栈 栈帧结构&#xff1a; 特点&#xff1a; 四、本地方法栈 特点&#xff1a; 五、堆 堆结构&#xff1a; 特点&#xff1a; 对象分配过程&#xff1a; 六、方法区 方法区结构&#xff1a; 特点&#xff1a; 运行时常量池…

从微积分到集合论(1630-1910)(历史简介)——第4章——现代积分理论的起源(Thomas Hawkins)

第 4 章 现代积分理论的起源 (The Origins of Modern Theories of Integration) Thomas Hawkins 目录 4.1 引言(Introduction) 4.2 Fourier分析与任意函数(Fourier analysis and arbitrary functions) 4.3 对Fourier问题的回应(Responses to Fourier)(1821-1854)…

《Linux运维总结:宝德服务器RAID开启(方式一)》

总结&#xff1a;整理不易&#xff0c;如果对你有帮助&#xff0c;可否点赞关注一下&#xff1f; 更多详细内容请参考&#xff1a;Linux运维实战总结 一、背景信息 说明&#xff1a;从客户那里退回来的一台宝德服务器&#xff0c;硬盘不见了&#xff0c;现在需要用两个2T的硬盘…

NY118NY120美光固态闪存NY124NY129

NY118NY120美光固态闪存NY124NY129 美光NY系列固态闪存深度解析&#xff1a;技术、性能与行业洞察 技术架构与核心创新 美光NY系列&#xff08;包括NY118、NY120、NY124、NY129等型号&#xff09;作为企业级存储解决方案的代表作&#xff0c;延续了品牌在3D NAND技术上的深厚…

Odoo 19 路线图(新功能)

Odoo 19 路线图(新功能) Odoo 19 路线图是Odoo官方针对下一版本的发布计划&#xff0c;将在自动化、合规性、用户体验、碳排放报告及本地化等领域推出超过16项新功能。本路线图详细阐述了Odoo 19如何在过往版本基础上进一步提升&#xff0c;助力企业优化销售、财务、运营及客户…

基于NXP例程学习CAN UDS刷写流程

文章目录 前言1.概述1.1 诊断报文 2.协议数据单元(N_PDU)2.1 寻址信息&#xff08;N_AI&#xff09;2.1.1 物理寻址2.1.2 功能寻址2.1.3 常规寻址&#xff08;Normal addressing&#xff09;2.1.4 常规固定寻址&#xff08;Normal fixed addressing&#xff09;2.1.5 扩展寻址&…

基于有效集MPC控制算法的直线同步电机simulink建模与仿真,MPC使用S函数实现

目录 1.课题概述 2.系统仿真结果 3.核心程序 4.系统仿真参数 5.系统原理简介 6.参考文献 7.完整工程文件 1.课题概述 有效集算法通过迭代地选择一组 "有效" 约束&#xff0c;将约束优化问题转化为一系列无约束或等式约束优化问题。直线同步电机 (Linear Synch…

让敏感数据在流转与存储中始终守护在安全范围

在企业数字化运营浪潮中&#xff0c;企业内部应用服务器面临着非法访问、数据泄露等风险&#xff0c;如何全面守护应用服务器文件安全&#xff0c;让敏感数据在流转与存储中始终守护在安全范围&#xff1f; 服务器白名单让数据流转安全又高效 天 锐 蓝盾的服务器白名单功能既…

【Linux】find 命令详解及使用示例:递归查找文件和目录

【Linux】find 命令详解及使用示例&#xff1a;递归查找文件和目录 引言 find 是 Linux/Unix 系统中强大的文件搜索工具&#xff0c;用于在目录层次结构中递归查找文件和目录。它提供了丰富的搜索条件和灵活的操作选项&#xff0c;可以满足从简单到复杂的各种文件查找需求。 …

【论文阅读笔记】万花筒:用于异构多智能体强化学习的可学习掩码

摘要 在多智能体强化学习&#xff08;MARL&#xff09;中&#xff0c;通常采用参数共享来提高样本效率。然而&#xff0c;全参数共享的流行方法通常会导致智能体之间的策略同质&#xff0c;这可能会限制从策略多样性中获得的性能优势。为了解决这一关键限制&#xff0c;我们提出…

负载均衡LB》》HAproxy

Ubuntu 22.04 安装HA-proxy 官网 资料 # 更新系统包列表&#xff1a; sudo apt update # 安装 HAproxy sudo apt install haproxy -y # 验证安装 haproxy -v # 如下图配置 Haproxy 在这里插入代码片》》》配置完之后 重启 Haproxy sudo systemctl restart haproxy 补充几…

UE 5 和simulink联合仿真,如果先在UE5这一端结束Play,过一段时间以后**Unreal Engine 5** 中会出现显存不足错误

提问 UE5报错如图。解析原因 回答 你遇到的这个错误提示是&#xff1a; “Out of video memory trying to allocate a rendering resource. Make sure your video card has the minimum required memory, try lowering the resolution and/or closing other applications tha…

Rust 控制流

文章目录 Rust 控制流if 表达式循环实现重复用 loop 重复代码从循环返回值循环标签用于区分多层循环while 条件循环用 for 循环遍历集合 Rust 控制流 在大多数编程语言中&#xff0c;根据条件是否为真来运行某些代码&#xff0c;以及在条件为真时重复运行某些代码&#xff0c;是…

Python 3.11.9 安装教程

前言 记录一下Windows环境下Python解释器的安装过程。 安装过程 1、安装程序下载 打开Python官网&#xff1a; 点击Downloads&#xff0c;选择Windows&#xff1a; 页面中找到需要的3.11.9版本&#xff0c;点击Download Windows installer (64-bit)下载&#xff1a; 2、…