Eigen幾何變換類 (Transform, Quaternion等)

1.?Transform?類:仿射/射影變換

模板參數

cpp

Transform<Scalar, Dim, Mode, Options>
  • Scalar:數據類型(如?float,?double)。

  • Dim:維度(2 或 3)。

  • Mode:變換類型:

    • Affine(默認):仿射變換(平移+旋轉+縮放)。

    • AffineCompact:無縮放項的仿射變換。

    • Projective:射影變換(含透視效果)。

  • Options:存儲順序(ColMajor?或?RowMajor)。

核心屬性與方法
方法/屬性參數說明返回值/功能示例
matrix()返回底層 4x4 變換矩陣Matrix4f m = t.matrix();
translate(Vector3f)平移向量應用平移(修改自身)t.translate(Vector3f(1, 0, 0));
rotate(Quaternionf)四元數或旋轉矩陣應用旋轉t.rotate(AngleAxisf(M_PI/2, Vector3f::UnitZ()));
scale(Scalar)?或?scale(Vector3f)統一縮放因子或各軸獨立縮放應用縮放t.scale(2.0);
prescale(),?prerotate(),?pretranslate()類似上述方法,但右乘(先執行新變換)鏈式變換t.pretranslate(Vector3f(0, 1, 0));
inverse()返回逆變換Transform3f inv_t = t.inverse();
linear()返回線性部分(旋轉+縮放,3x3矩陣)Matrix3f R = t.linear();
translation()返回平移部分(向量)Vector3f pos = t.translation();
初始化方式
方法示例說明
單位變換Transform3f t = Transform3f::Identity();初始化為單位變換
從旋轉矩陣構造t.linear() = AngleAxisf(θ, axis).toRotationMatrix();設置旋轉部分

2.?Quaternion?類:三維旋轉

模板參數

cpp

Quaternion<Scalar, Options>
  • Scalar:數據類型(如?float,?double)。

  • Options:存儲順序(AutoAlign?或?DontAlign)。

核心屬性與方法
方法/屬性參數說明返回值/功能示例
w(),?x(),?y(),?z()訪問四元數分量(實部?w,虛部?x,y,zfloat qw = q.w();
coeffs()返回向量格式?[x, y, z, w]Vector4f coeff = q.coeffs();
normalize()歸一化四元數(修改自身)q.normalize();
conjugate()返回共軛四元數Quaternionf q_conj = q.conjugate();
toRotationMatrix()轉換為 3x3 旋轉矩陣Matrix3f R = q.toRotationMatrix();
AngleAxis(angle, axis)angle:弧度,axis:旋轉軸(需歸一化)從軸角構造四元數Quaternionf q = AngleAxisf(M_PI/2, Vector3f::UnitZ());
slerp(Scalar t, Quaternion other)t:插值因子(0~1),other:目標四元數球面線性插值Quaternionf q_interp = q1.slerp(0.5, q2);
初始化方式
方法示例說明
直接構造Quaternionf q(w, x, y, z);注意參數順序(w在前)
從旋轉矩陣構造Quaternionf q(rotation_matrix);需矩陣正交

3. 其他幾何類

(1)?AngleAxis(軸角表示)
方法/屬性參數說明示例
angle()返回旋轉角度(弧度)float θ = aa.angle();
axis()返回旋轉軸(需歸一化)Vector3f axis = aa.axis();
toRotationMatrix()轉換為 3x3 旋轉矩陣Matrix3f R = aa.toRotationMatrix();
(2)?Rotation2D(二維旋轉)
方法參數說明示例
angle()返回旋轉角度(弧度)Rotation2Df rot(M_PI/4);
toRotationMatrix()轉換為 2x2 旋轉矩陣Matrix2f R = rot.toRotationMatrix();

4. 代碼示例

組合變換(平移+旋轉+縮放)

cpp

#include <Eigen/Geometry>
using namespace Eigen;// 初始化變換
Transform<float, 3, Affine> t = Transform<float, 3, Affine>::Identity();
t.translate(Vector3f(1, 2, 3));                      // 平移
t.rotate(Quaternionf(AngleAxisf(M_PI/2, Vector3f::UnitX()))); // 繞 X 軸旋轉 90°
t.scale(0.5);                                        // 縮放// 應用變換到點
Vector3f p(0, 1, 0);
Vector3f p_transformed = t * p;  // 結果: (1, 2.5, 3)
四元數插值

cpp

Quaternionf q1 = Quaternionf::Identity();
Quaternionf q2(AngleAxisf(M_PI/2, Vector3f::UnitZ()));
Quaternionf q_mid = q1.slerp(0.5, q2);  // 中間旋轉

5. 關鍵注意事項

  1. 變換順序:Eigen 默認左乘(即?t.rotate()?是相對于局部坐標系)。

    • 使用?prerotate()/pretranslate()?可切換為右乘(相對于世界坐標系)。

  2. 性能優化

    • 對于純旋轉,直接使用?Quaternion?或?AngleAxis?比?Transform?更高效。

    • 頻繁變換組合時,優先復用?Transform?對象。

  3. 歸一化:四元數和旋轉軸需手動歸一化(normalize())。

6. 幾何類對比

類名最佳用途內存占用計算效率
Transform復合變換(平移+旋轉+縮放)16 floats (3D)中等
Quaternion純旋轉/插值4 floats
AngleAxis軸角表示旋轉4 floats (3+1)低(需轉換)
Rotation2D二維旋轉1 float

掌握這些類后,可高效處理 2D/3D 空間中的幾何變換!更多細節見?Eigen Geometry 文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78409.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78409.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78409.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

openGauss手工配置主備

1、初始化 創建一個操作系統用戶&#xff0c;例如postgres&#xff0c;為這個用戶設置PATH和LD_LIBRARY_PATH環境變量&#xff0c;指向opengauss/bin和opengauss/lib export GAUSSHOME/mnt/disk01/opengauss export PATH$GAUSSHOME/bin:$PATH export LD_LIBRARY_PATH$GAUSS…

CSS預處理器對比:Sass、Less與Stylus如何選擇

引言 CSS預處理器已成為現代前端開發的標準工具&#xff0c;它們通過添加編程特性來增強純CSS的功能&#xff0c;使樣式表更加模塊化、可維護且高效。在眾多預處理器中&#xff0c;Sass、Less和Stylus是三個最流行的選擇&#xff0c;它們各自擁有獨特的語法和功能特點。本文將深…

基于Docker、Kubernetes和Jenkins的百節點部署架構圖及信息流描述

以下是基于Docker、Kubernetes和Jenkins的百節點部署架構圖及信息流描述,使用文本和Mermaid語法表示: 架構圖(Mermaid語法) #mermaid-svg-WWCAqL1oWjvRywVJ {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WWCAq…

js中get,set用法

1、作為對象的訪問器屬性 //使用Object.definePropertylet obj {_a:123};Object.defineProperty(obj, "a", {get() {return this._a;},set(val) {this._aval},});console.log(obj.a); //123obj.a456console.log(obj.a) // 456 //使用對象字面量let obj {_a:123,ge…

Steam游戲服務器攻防全景解讀——如何構建游戲級抗DDoS防御體系?

Steam游戲服務器的DDoS攻防體系設計&#xff0c;從協議層漏洞利用到業務連續性保障&#xff0c;深度拆解反射型攻擊、TCP狀態耗盡等7類威脅場景。基于全球15個游戲廠商攻防實戰數據&#xff0c;提供包含邊緣節點調度、AI流量指紋識別、SteamCMD加固配置的三維防護方案&#xff…

【AI】SpringAI 第四彈:接入本地大模型 Ollama

Ollama 是一個開源的大型語言模型服務工具。它的主要作用是幫助用戶快速在本地運行大模型&#xff0c; 簡化了在 Docker 容器內部署和管理大語言模型&#xff08;LLM&#xff09;的過程。 1. 確保Ollama 已經啟動 # 查看幫助文檔 ollama -h# 自動下載并啟動 ollama run deeps…

大語言模型的評估指標

目錄 一、混淆矩陣 1. 混淆矩陣的結構&#xff08;二分類為例&#xff09; 2.從混淆矩陣衍生的核心指標 3.多分類任務的擴展 4. 混淆矩陣的實戰應用 二、分類任務核心指標 1. Accuracy&#xff08;準確率&#xff09; 2. Precision&#xff08;精確率&#xff09; 3. …

SpringBoot Gradle插件:構建與打包配置

文章目錄 引言一、Spring Boot Gradle插件基礎二、依賴管理與配置三、應用打包配置四、啟動腳本與運行配置五、多環境構建與配置六、集成Docker與云原生支持七、實踐案例&#xff1a;自定義Spring Boot應用構建總結 引言 在Java生態系統中&#xff0c;Gradle作為一種靈活且強大…

Vue3 組件通信與插槽

Vue3 組件通信方式全解&#xff08;10種方案&#xff09; 一、組件通信方式概覽 通信方式適用場景數據流向復雜度Props/自定義事件父子組件簡單通信父 ? 子?v-model 雙向綁定父子表單組件父 ? 子??Provide/Inject跨層級組件通信祖先 → 后代??事件總線任意組件間通信任…

【KWDB 創作者計劃】_嵌入式硬件篇---數字電子器件

文章目錄 前言一、系列前綴(如 "74" 或 "54")74(商用級)54(工業級)二、邏輯家族(如 "LS"、"HC"、"HCT" 等)TTL(晶體管-晶體管邏輯)家族CMOS(互補金屬氧化物半導體)家族BiCMOS(雙極 CMOS)家族三、功能編號(如…

黃勇的《架構探險:從Java到大數據》內容詳解

《架構探險&#xff1a;從Java到大數據》內容詳解 1. 書籍核心主題 黃勇的《架構探險&#xff1a;從Java到大數據》是一本系統性探討架構設計演進的著作&#xff0c;結合Java技術棧和大數據場景&#xff0c;深入分析了從單體架構到分布式、微服務、云原生的演進路徑&#xff0…

【動手學強化學習】番外8-IPPO應用框架學習與復現

文章目錄 一、待解決問題1.1 問題描述1.2 解決方法 二、方法詳述2.1 必要說明&#xff08;1&#xff09;MAPPO 與 IPPO 算法的區別在于什么地方&#xff1f;&#xff08;2&#xff09;IPPO 算法應用框架主要參考來源 2.2 應用步驟2.2.1 搭建基礎環境2.2.2 IPPO 算法實例復現&am…

驅動開發硬核特訓 · Day 17:深入掌握中斷機制與驅動開發中的應用實戰

&#x1f3a5; 視頻教程請關注 B 站&#xff1a;“嵌入式 Jerry” 一、前言 在嵌入式驅動開發中&#xff0c;“中斷”幾乎無處不在。無論是 GPIO 按鍵、串口通信、網絡設備&#xff0c;還是 SoC 上的各種控制器&#xff0c;中斷都扮演著核心觸發機制的角色。對中斷機制掌握程度…

通過門店銷售明細表用PySpark得到每月每個門店的銷冠和按月的同比環比數據

假設我在Amazon S3上有銷售表的Parquet數據文件的路徑&#xff0c;包含ID主鍵、門店ID、日期、銷售員姓名和銷售額&#xff0c;需要分別用PySpark的SparkSQL和Dataframe API統計出每個月所有門店和各門店銷售額最高的人&#xff0c;不一定是一個人&#xff0c;以及他所在的門店…

PostgreSQL 常用日志

PostgreSQL 常用日志詳解 PostgreSQL 提供了多種日志類型&#xff0c;用于監控數據庫活動、排查問題和優化性能。以下是 PostgreSQL 中最常用的日志類型及其配置和使用方法。 一、主要日志類型 日志類型文件位置主要內容用途服務器日志postgresql-<日期>.log服務器運行…

MySQL 存儲過程:解鎖數據庫編程的高效密碼

目錄 一、什么是存儲過程?二、創建存儲過程示例 1:創建一個簡單的存儲過程示例 2:創建帶輸入參數的存儲過程示例 3:創建帶輸出參數的存儲過程三、調用存儲過程調用無參數存儲過程調用帶輸入參數的存儲過程調用帶輸出參數的存儲過程四、存儲過程中的流控制語句示例 1:使用 …

基于STM32的物流搬運機器人

功能&#xff1a;智能循跡、定距夾取、顏色切換、自動跟隨、自動避障、聲音夾取、藍牙遙控、手柄遙控、顏色識別夾取、循跡避障、循跡定距…… 包含內容&#xff1a;完整源碼、使用手冊、原理圖、視頻演示、PPT、論文參考、其余資料 資料只私聊

pg_jieba 中文分詞

os: centos 7.9.2009 pg: 14.7 pg_jieba 依賴 cppjieba、limonp pg_jieba 下載 su - postgreswget https://github.com/jaiminpan/pg_jieba/archive/refs/tags/vmaster.tar.gzunzip ./pg_jieba-master cd ~/pg_jieba-mastercppjieba、limonp 下載 su - postgrescd ~/pg_jie…

基于Python+Flask的MCP SDK響應式文檔展示系統設計與實現

以下是使用Python Flask HTML實現的MCP文檔展示系統&#xff1a; # app.py from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/installation) def installation():return render_templa…

【“星睿O6”AI PC開發套件評測】GPU矩陣指令算力,GPU帶寬和NPU算力測試

【“星睿O6”AI PC開發套件評測】GPU矩陣指令算力&#xff0c;GPU帶寬和NPU算力測試 安謀科技、此芯科技與瑞莎計算機聯合打造了面向AI PC、邊緣、機器人等不同場景的“星睿O6”開發套件 該套件異構集成了Armv9 CPU核心、Arm Immortalis? GPU以及安謀科技“周易”NPU 開箱和…