qt QQuaternion详解

1. 概述

QQuaternion 是 Qt 中用于表示三维空间中旋转的四元数类。它包含一个标量部分和一个三维向量部分,可以用来表示旋转操作。四元数在计算机图形学中广泛用于平滑的旋转和插值。

2. 重要方法
  • 默认构造函数

    QQuaternion::QQuaternion(); // 构造单位四元数 (1, 0, 0, 0)
  • 从标量和向量构造

    QQuaternion::QQuaternion(float scalar, const QVector3D &vector); // 从标量和向量构造四元数
    QQuaternion::QQuaternion(float scalar, float xpos, float ypos, float zpos); // 从标量和三个坐标构造四元数
  • QVector4D 构造

    QQuaternion::QQuaternion(const QVector4D &vector); // 从 QVector4D 构造四元数
基本操作
  • 共轭

    QQuaternion QQuaternion::conjugated() const; // 返回四元数的共轭
  • 点积

    static float QQuaternion::dotProduct(const QQuaternion &q1, const QQuaternion &q2); // 返回两个四元数的点积
  • 从轴和角度构造

    static QQuaternion QQuaternion::fromAxisAndAngle(const QVector3D &axis, float angle); // 从轴和角度构造四元数
    static QQuaternion QQuaternion::fromAxisAndAngle(float x, float y, float z, float angle); // 从轴和角度构造四元数
  • 归一化

    void QQuaternion::normalize(); // 归一化四元数
    QQuaternion QQuaternion::normalized() const; // 返回归一化的四元数
  • 旋转向量

    QVector3D QQuaternion::rotatedVector(const QVector3D &vector) const; // 旋转一个向量
  • 设置和获取分量

    void QQuaternion::setScalar(float scalar); // 设置标量部分
    void QQuaternion::setVector(const QVector3D &vector); // 设置向量部分
    float QQuaternion::scalar() const; // 获取标量部分
    QVector3D QQuaternion::vector() const; // 获取向量部分
转换
  • 欧拉角

    void QQuaternion::getEulerAngles(float *pitch, float *yaw, float *roll) const; // 获取欧拉角
    QVector3D QQuaternion::toEulerAngles() const; // 返回欧拉角
  • 旋转矩阵

    QMatrix3x3 QQuaternion::toRotationMatrix() const; // 转换为旋转矩阵
  • 四元数到 QVector4D

    QVector4D QQuaternion::toVector4D() const; // 转换为 QVector4D
其他
  • 长度

    float QQuaternion::length() const; // 返回四元数的长度
    float QQuaternion::lengthSquared() const; // 返回四元数的长度平方
  • 检查

    bool QQuaternion::isIdentity() const; // 检查是否为单位四元数
    bool QQuaternion::isNull() const; // 检查是否为零四元数
  • 插值

    static QQuaternion QQuaternion::slerp(const QQuaternion &q1, const QQuaternion &q2, float t); // 球面线性插值
    static QQuaternion QQuaternion::nlerp(const QQuaternion &q1, const QQuaternion &q2, float t); // 归一化线性插值
运算符重载
  • 乘法

    QQuaternion &QQuaternion::operator*=(float factor); // 乘以标量
    QQuaternion &QQuaternion::operator*=(const QQuaternion &quaternion); // 乘以另一个四元数
  • 加法

    QQuaternion &QQuaternion::operator+=(const QQuaternion &quaternion); // 加法
  • 减法

    QQuaternion &QQuaternion::operator-=(const QQuaternion &quaternion); // 减法
  • 除法

    QQuaternion &QQuaternion::operator/=(float divisor); // 除以标量
#include <QCoreApplication>
#include <QQuaternion>
#include <QVector3D>
#include <QDebug>int main(int argc, char *argv[]) {QCoreApplication app(argc, argv);// 构造一个四元数QQuaternion quaternion(0.7071, 0.7071, 0.0, 0.0);// 归一化四元数quaternion.normalize();// 获取四元数的标量和向量部分float scalar = quaternion.scalar();QVector3D vector = quaternion.vector();qDebug() << "Scalar:" << scalar;qDebug() << "Vector:" << vector;// 旋转一个向量QVector3D originalVector(1.0, 0.0, 0.0);QVector3D rotatedVector = quaternion.rotatedVector(originalVector);qDebug() << "Original Vector:" << originalVector;qDebug() << "Rotated Vector:" << rotatedVector;// 转换为欧拉角QVector3D eulerAngles = quaternion.toEulerAngles();qDebug() << "Euler Angles:" << eulerAngles;return app.exec();
}

觉得有帮助的话,打赏一下呗。。

           

需要商务合作(定制程序)的欢迎私信!! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/899252.shtml

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

相关文章

如何将爬取的评论数据存储到数据库?

在使用Python爬虫获取1688商品评论后&#xff0c;将这些数据存储到数据库中是一个常见的需求。这样可以方便后续的数据分析、查询和管理。本文将详细介绍如何将爬取的评论数据存储到数据库中&#xff0c;包括MySQL和SQLite两种常见的数据库。 一、准备工作 1. 安装必要的Pytho…

Maven中为什么有些依赖不用引入版本号

先给出一个例子&#xff1a; <parent><artifactId>sky-take-out</artifactId><groupId>com.sky</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>sky-s…

Nginx相关漏洞解析

一、CRLF注入漏洞 原理&#xff1a;Nginx将传入的url进行解码&#xff0c;对其中的%0a%0d替换成换行符&#xff0c;导致后面的数据注入至头部&#xff0c;造成CRLF 注入漏洞 1、开环境 2、访问网站&#xff0c;并抓包 3、构造请求头 %0ASet-cookie:JSPSESSID%3D1 这样就可以…

RUBY报告系统

我们常用GFP及其变体如RFP、YFP、mCherry等作为基因表达的报告蛋白——需要荧光显微镜制片观察&#xff1b;此外还有GUS或荧光素酶作为报告酶——需要添加底物。 RUBY报告系统则与众不同&#xff0c;其作用原理是&#xff1a;将酪氨酸转化为鲜艳的红色甜菜碱&#xff0c;无需使…

[力扣每日一练]关于MySQL和pandas的正则表达式应用

一&#xff1a;题目要求 表&#xff1a;Users-------------------------- | Column Name | Type | -------------------------- | user_id | int | | email | varchar | -------------------------- (user_id) 是这张表的唯一主键。 每一行包含用…

office_word中使用宏以及DeepSeek

前言 Word中可以利用DeepSeek来生成各种宏&#xff0c;从而生成我们需要各种数据和图表&#xff0c;这样可以大大减少我们手工的操作。 1、Office的版本 采用的是微软的office2016&#xff0c;如下图&#xff1a; 2、新建一个Word文档 3、开启开发工具 这样菜单中的“开发工具…

深度学习框架PyTorch——从入门到精通(10)PyTorch张量简介

这部分是 PyTorch介绍——YouTube系列的内容&#xff0c;每一节都对应一个youtube视频。&#xff08;可能跟之前的有一定的重复&#xff09; 创建张量随机张量和种子张量形状张量数据类型 使用PyTorch张量进行数学与逻辑运算简单介绍——张量广播关于张量更多的数学操作原地修改…

Oracle 10G DG 修复从库-磁盘空间爆满导致从库无法工作

一、背景 由于近期在做应用升级和系统改造&#xff0c;导致几天没怎么观察DG库的状态。这几天归档日志暴涨导致磁盘空间用尽&#xff0c;从库无法接收主库的归档日志&#xff0c;且从库无法工作。经过检查&#xff0c;发现从库所需要的日志在主库均存在。所以当前文档使用归档…

【踩坑系列】使用httpclient调用第三方接口返回javax.net.ssl.SSLHandshakeException异常

1. 踩坑经历 最近做了个需求&#xff0c;需要调用第三方接口获取数据&#xff0c;在联调时一直失败&#xff0c;代码抛出javax.net.ssl.SSLHandshakeException异常&#xff0c; 具体错误信息如下所示&#xff1a; javax.net.ssl.SSLHandshakeException: sun.security.validat…

算法基础——模拟

目录 1 多项式输出 2.蛇形方阵 3.字符串的展开 模拟&#xff0c;顾名思义&#xff0c;就是题⽬让你做什么你就做什么&#xff0c;考察的是将思路转化成代码的代码能⼒。这类题⼀般较为简单&#xff0c;属于竞赛⾥⾯的签到题&#xff08;但是&#xff0c;万事⽆绝对&#xff…

PrimeTime生成.lib竟暗藏PG添加Bug

在primeTime里生成lib&#xff0c;如何能带上相关的pg信息&#xff1f; 这是一位群友的发问&#xff0c;就这个问题总结了下可能的原因和解决步骤&#xff1a; 概念 PrimeTime是Synopsys的静态时序分析工具&#xff0c;通常用于在设计的各个阶段进行时序验证。 1&#xff09…

yolo系列算法最新进展

YOLO&#xff08;You Only Look Once&#xff09;系列算法作为目标检测领域的代表性模型&#xff0c;自2016年推出以来不断迭代&#xff0c;在速度与精度之间寻求平衡。截至2024年&#xff0c;其最新进展主要集中在以下几个方面&#xff1a; ‌1. YOLOv8 的优化与扩展‌ ‌官方…

动态规划:路径类dp

路径类dp 1.矩阵的最小路径和_牛客题霸_牛客网 #include<iostream> #include<cstring> using namespace std;const int N 510; int f[N][N]; int n, m;int main() {cin >> n >> m;memset(f, 0x3f3f3f, sizeof(f));f[0][1] 0;for (int i 1; i < …

性能测试理论基础-性能指标及jmeter中的指标

1、什么是性能测试 通过一定的手段,在多并发下情况下,获取被测系统的各项性能指标,验证被测系统在高并发下的处理能力、响应能力,稳定性等,能否满足预期。定位性能瓶颈,排查性能隐患,保障系统的质量,提升用户体验。 2、什么样的系统需要做性能测试 用户量大,页面访问…

Debian,Ubuntu,设置/etc/vim/vimrc.tiny解决:上下左右变成ABCD,backspace退格键失效的问题

Debian,Ubuntu,用设置/etc/vim/vimrc.tiny解决:上下左右变成ABCD,backspace退格键失效的问题 Debian,Ubuntu, 默认的vi 在编辑模式下的上下左右变成ABCD , 退格键也失效 解决办法1, 卸载重装vim sudo apt remove vim; sudo apt install -y vim解决办法2: 修改 /etc/vim/vimr…

Redis 单机16个db,集群只有一个的基本知识

目录 前言1. 基本知识2. 配置 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn Java基本知识&#xff1a; java框架 零基础从入门到精通…

蓝桥杯C++基础算法-多重背包(优化)

这段代码实现了一个多重背包问题的动态规划解法&#xff0c;并且使用了二进制拆分&#xff08;或称二进制优化&#xff09;来优化物品的数量处理。这种方法可以显著减少状态转移的次数&#xff0c;提高算法的效率。以下是代码的详细思路解析&#xff1a; 1. 问题背景 给定 n 个…

FALL靶机攻略

1.下载靶机&#xff0c;导入靶机 下载地址&#xff1a;https://download.vulnhub.com/digitalworld/FALL.7z 开启靶机。 2. 靶机、kali设置NAT网卡模式 3. kali扫描NAT网卡段的主机 kali主机 nmap扫描&#xff1a;nmap 192.168.92.1/24 判断出靶机ip是192.168.92.133。开启…

notepad++代码查看器分享

文章目录 &#x1f4dd; Notepad 简介&#x1f527; 主要特点打开.c文件示意高亮语法展示全局替换功能展示 &#x1f4dd; Notepad 简介 Notepad 是一款 免费的开源文本编辑器和源代码编辑器&#xff0c;运行在 Windows 系统上。 它是对 Windows 自带“记事本”的增强版本&…

详细介绍Spring MVC的执行流程是怎么样的?

Spring MVC 是 Spring 框架的一部分&#xff0c;用于构建 Web 应用程序。它的执行流程如下&#xff1a; 前端控制器&#xff08;DispatcherServlet&#xff09;接收请求&#xff1a;用户通过浏览器发送 HTTP 请求到服务器&#xff0c;请求首先被前端控制器 DispatcherServlet 接…