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
    #include
    #include
    #include

    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();

    }

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

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

相关推荐
小短腿的代码世界4 小时前
Qt Bluetooth源码深度解析:从HCI协议到跨平台API的完整架构
开发语言·qt·架构
小短腿的代码世界5 小时前
Qt WebEngine多进程架构与IPC通信:从Chromium多进程到Qt信号槽融合
qt·架构·系统架构
尘中远7 小时前
【Qwt 7.0 系列】快速入门与核心新特性概览 —— 更现代的 Qt 数据可视化库
qt·数据可视化·绘图·qwt·科学绘图
初阳7859 小时前
【Qt】系统相关(3)——多线程
qt
初阳78512 小时前
【Qt】系统相关(2)——文件
开发语言·qt
尘中远1 天前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia1 天前
Qt——多线程间的互斥
开发语言·qt
尘中远1 天前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远1 天前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia1 天前
Qt——进程与线程的概念
qt