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();
}
覺得有幫助的話,打賞一下唄。。
? ? ? ? ? ?
需要商務合作(定制程序)的歡迎私信!!?