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.pswp.cn/news/899252.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/899252.shtml
英文地址,請注明出處:http://en.pswp.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 接…