四元素的真面目..........簡單粗暴

作者:Yang Eninala
鏈接:https://www.zhihu.com/question/23005815/answer/33971127
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
?

根據我的理解,大多數人用漢密爾頓四元數就只是做三維空間的旋轉變換(我反正沒見過其他用法)。那么你不用學群論,甚至不用復習線性代數,看我下面的幾張圖就可以了。

首先,定義一個你需要做的旋轉。旋轉軸為向量v=(vx,vy,vz),旋轉角度為\theta(右手法則的旋轉)。如下圖所示:
此圖中v=(\frac{1}{\sqrt{14} } ,\frac{2}{\sqrt{14} } ,\frac{3}{\sqrt{14} }),\theta =\frac{\pi }{3}


那么與此相對應的四元數(下三行式子都是一個意思,只是不同的表達形式)
q=(cos(\frac{\theta }{2} ),sin(\frac{\theta }{2} )*vx,sin(\frac{\theta }{2} )*vy,sin(\frac{\theta }{2} )*vz)
q=(cos(\frac{\pi }{6} ),sin(\frac{\pi }{6} )*\frac{1}{\sqrt{14} } ,sin(\frac{\pi }{6} )*\frac{2}{\sqrt{14} },sin(\frac{\pi }{6} )*\frac{3}{\sqrt{14} })
q=cos(\frac{\pi }{6} )+sin(\frac{\pi }{6} )*\frac{1}{\sqrt{14} }i +sin(\frac{\pi }{6} )*\frac{2}{\sqrt{14} }j+sin(\frac{\pi }{6} )*\frac{3}{\sqrt{14} }k

?

這時它的共軛(下三行式子都是一個意思,只是不同的表達形式),
q^{-1} =(cos(\frac{\theta }{2} ),-sin(\frac{\theta }{2} )*vx,-sin(\frac{\theta }{2} )*vy,-sin(\frac{\theta }{2} )*vz)
q^{-1} =(cos(\frac{\pi }{6} ),-sin(\frac{\pi }{6} )*\frac{1}{\sqrt{14} } ,-sin(\frac{\pi }{6} )*\frac{2}{\sqrt{14} },-sin(\frac{\pi }{6} )*\frac{3}{\sqrt{14} })
q^{-1} =cos(\frac{\pi }{6} )-sin(\frac{\pi }{6} )*\frac{1}{\sqrt{14} }i -sin(\frac{\pi }{6} )*\frac{2}{\sqrt{14} }j-sin(\frac{\pi }{6} )*\frac{3}{\sqrt{14} }k

如果你想算一個點w=(wx,wy,wz)在這個旋轉下新的坐標w^{'},需要進行如下操作,
1.定義純四元數
qw=(0,wx,wy,wz)=0+wx*i+wy*j+wz*k
2.進行四元數運算
qw^{'} =q*qw*q^{-1}
3.產生的qw^{'}一定是純四元數,也就是說它的第一項為0,有如下形式:
qw^{'} =(0,wx^{'},wy^{'},wz^{'})=0+wx^{'}*i+wy^{'}*j+wz^{'}*k
4.qw^{'}中的后三項(wx^{'},wy^{'},wz^{'})就是w^{'}
w^{'} =(wx^{'},wy^{'},wz^{'})
這樣,就完成了一次四元數旋轉運算。

同理,如果你有一個四元數:
q=(q1,q2,q3,q4)=(cos(\frac{\theta }{2} ),sin(\frac{\theta }{2} )*vx,sin(\frac{\theta }{2} )*vy,sin(\frac{\theta }{2} )*vz)
那么,它對應一個以向量v=(vx,vy,vz)為軸旋轉\theta角度的旋轉操作(右手法則的旋轉)。

***********************************************************************************************************
如果你想對四元數有著更深入的了解,請往下看。

四元數由漢密爾頓發明,這一發明起源于十九世紀的某一天。在這一天早上,漢密爾頓下樓吃早飯。這時他的兒子問他,“爸爸,我們能夠對三元數組(triplet,可以理解為三維向量)做乘法運算么?”漢密爾頓說“不行,我只能加減它們。”

這時來自21世紀的旁白旁先生說,“大家快來看十九世紀的數學家有多二,連內積和外積都不是知道。”

十九世紀的漢密爾頓也許確實不知道內積和外積,但是他知道,他想要的三維向量乘法要比內積和外積運算“高大上”很多。這一乘法運算要滿足下列四條性質:
1.運算產生的結果也要是三維向量
2.存在一個元運算,任何三維向量進行元運算的結果就是其本身
3.對于任何一個運算,都存在一個逆運算,這兩個運算的積是元運算
4.運算滿足結合律

換而言之,漢密爾頓想定義的不是一個簡單的映射關系,而是一個群!(后來我們知道四元數所在群為S3,而四元數所代表的三維旋轉是SO(3),前者是后者的兩倍覆蓋)內積連性質1都不滿足,外積不滿足性質3。

漢密爾頓先生就這么被自己兒子提出的問題難倒了。經歷了無數個日日夜夜,他絞盡腦汁也沒想明白這個問題。終于有一天(1843年的一天),漢密爾頓先生終于意識到了,自己所需要的運算在三維空間中是不可能實現的,但在四維空間中是可以的,他是如此的興奮,以至于把四元數的公式刻在了愛爾蘭的一座橋上。

旁白:“WTF,我讓你講三維物體的旋轉,你給我扯到四維空間上去。”

(不加說明,以下所說四元數全為單位四元數)
其實,四元數有四個變量,完全可以被看作一個四維向量。單位四元數(norm=1)則存在于四維空間的一個球面上。q_{a}q_{b},四元數q_{a}乘以四元數q_{b}其實看作(1)對q_{a}進行q_{b}左旋轉,或者(2)對q_{b}進行q_{a}右旋轉。所以從始至終,四元數定義的都是四維旋轉,而不是三維旋轉!任意的四維旋轉都可以唯一的拆分為一個左旋轉和一個右旋轉,表達出來就是q_{_{L}}pq_{_{R}}。這里,我們對四元數(四維向量)p進行了一個q_{_{L}}左旋轉和一個q_{_{R}}右旋轉。結果當然是一個四元數,符合性質1。這個運算也同時符合性質2,3,4。

好了,說完了四維旋轉,我們終于可以說說三維旋轉了。說白了,三維旋轉就是四維旋轉的一個特例,就像二維旋轉是三維旋轉的一個特例一樣。說是特例其實不準確,準確的說是一個子集或者subgroup。為了進行三維旋轉運算,漢密爾頓首先在四維空間里劃出了一塊三維空間。漢密爾頓定義了一種純四元數(pure quaternion),其表達式為qw=(0,wx,wy,wz)。純四元數第一項為零,它存在于四維空間的三維超平面上,與三維空間中的三維向量一一對應。然后,就有了我們常見的q*qw*q^{-1}這種左乘單位四元數,右乘其共軛的表達式。我真心不知道漢密爾頓是怎么想出來的,不過回過頭來看,這個運算形式是為了限制其運算結果所在的空間。簡單的說,當對一個三維向量進行三維旋轉后,我們希望得到的是一個三維向量。(如果你真能得到一個四維向量,就不敢自己在家轉圈圈了吧,轉著轉著,就進入四次元了!)那么這個左乘單位四元數,右乘其共軛的運算保證了結果是一個在三維超平面上中的純四元數。

把左乘和右乘表達為矩陣形式會讓我們看的更清楚一些。依照qw的定義,q*qw*q^{-1}的矩陣形式為
\left[   \begin{array}{ c c c c} 1 & 0 & 0 & 0\\     0 & q_{1}^2+q_{2}^2-q_{3}^2-q_{4}^2 & 2q_{2}q_{3}-2q_{1}q_{4}         & 2q_{2}q_{4}+2q_{1}q_{3}         \\   0&    2q_{2}q_{3}+2q_{1}q_{4}         & q_{1}^2-q_{2}^2+q_{3}^2-q_{4}^2 & 2q_{3}q_{4}-2q_{1}q_{2}         \\    0 &  2q_{2}q_{4}-2q_{1}q_{3}         & 2q_{3}q_{4}+2q_{1}q_{2}         & q_{1}^2-q_{2}^2-q_{3}^2+q_{4}^2   \end{array} \right] \left[   \begin{array}{ c } 0\\ wx\\ wy\\ wz   \end{array} \right]
很明顯,前面的矩陣雖然是一個4x4的四維旋轉矩陣,但是它只是在右下角3x3的區域內和一個單位矩陣有所不同。所以說,它是一個限制在三維超平面上的四維旋轉。如果表達式右邊不是共軛,而是任意四元數,那么我們所作的就是一個很普通的四維旋轉。如果只是左乘一個單位四元數,右邊什么都不乘,那么我們得到的是四維旋轉的一個子集,這個子集并不能保證結果限制在三維超平面上。如果只右乘,不左乘也是一樣一樣的。

說了這么多,對于堅持到最后的你,上圖一幅,以表感謝。


其實這張圖解釋了一個長久的疑問。為什么四元數q=(cos(\frac{\theta }{2} ),sin(\frac{\theta }{2} )*vx,sin(\frac{\theta }{2} )*vy,sin(\frac{\theta }{2} )*vz)里用的是\frac{\theta }{2}而不是\theta。這是因為q做的就是一個\frac{\theta }{2}的旋轉,而q^{-1}也做了一個\frac{\theta }{2}的旋轉。我們進行了兩次旋轉,而不是一次,這兩次旋轉的結果是一個旋轉角為\theta的旋轉。

編輯于 2015-03-08

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

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

相關文章

2.自定義變量調節器

① 使用registerPlugin()方法來擴充變量調節器 該方法接收3個參數 1. 字符串modifier 2. 插件函數的名字 3. PHP回調函數 示例:自定義一個變量調節器,可以改變文字的顏色和大小 第一步:調用smarty對象的registerPlugin(&#x…

SpringBoot2構建基于RBAC權限模型的駕校代理小程序后端

本項目是使用SpringBoot2構建的一套基于RBAC權限模型的后臺管理系統,前端是微信小程序。 項目地址: github.com/fuyunwang/D… 項目的緣由 最近接了個外包,主要是針對于駕校開發一個代理小程序。目的是為了方便駕校的管理來招攬學員,同時方便維護學員和代理信息。 項…

while read line的問題

循環中的重定向或許你應該在其他腳本中見過下面的這種寫法&#xff1a;while read linedo…done < file剛開始看到這種結構時&#xff0c;很難理解< file是如何與循環配合在一起工作的。因為循環內有很多條命令&#xff0c;而我們之前接觸的重定向都是為一條命令工作的。…

Linemod;理解

Linemod 代碼筆記 2019年03月11日 16:18:30 haithink 閱讀數&#xff1a;197 最近了解到 Linemod 這個模板匹配算法&#xff0c;印象不錯 準備仔細學習一下&#xff0c;先做點代碼筆記&#xff0c;免得后面不好回顧 目前的筆記基本上把 核心流程都分析得比較清楚了&#xff0…

Swift3中數組創建方法

轉載自&#xff1a;http://blog.csdn.net/bwf_erg/article/details/70858865 數組是由一組類型相同的元素構成的有序數據集合。數組中的集合元素是有 序的&#xff0c;而且可以重復出現。 1 數組創建 在Swift語言中&#xff0c;數組的類型格式為&#xff1a; Array<ElementT…

BZOJ 5249: [2018多省省隊聯測]IIIDX(貪心 + 線段樹)

題意 這一天&#xff0c;\(\mathrm{Konano}\) 接到了一個任務&#xff0c;他需要給正在制作中的游戲 \(\mathrm{《IIIDX》}\) 安排曲目 的解鎖順序。游戲內共有\(n\) 首曲目&#xff0c;每首曲目都會有一個難度 \(d\) &#xff0c;游戲內第 \(i\) 首曲目會在玩家 Pass 第 \(\lf…

手眼標定

Eye-in-hand和Eye-to-hand問題求解和實驗 2018年12月07日 00:00:40 百川木易 閱讀數 3018 2018/12/5 By Yang Yang&#xff08;yangyangipp.ac.cn&#xff09; 本文所有源碼和仿真場景文件全部公開&#xff0c;點擊Gitee倉庫鏈接。 文章目錄 問題描述Eye-in-hand問題求解公式…

RNN總結

RNN既可以表述為循環神 經網絡&#xff08;recurrent neural network&#xff09;&#xff0c;也可以表述為遞歸神經網絡&#xff08;recursive neural network&#xff09;&#xff0c;前者一般用于處理以時間序列為輸入的問題&#xff08;比如把一個句子看成詞組成的序列&…

Problem 2. number題解

number&#xff1a;數學二分圖匹配 首先&#xff0c;如果S<N,那么S1&#xff0c;S2...N這些數直接放在S1,S2...N的位置上(如果其他數x放在這些位置上面&#xff0c;這些數不放在對應位置&#xff0c;那么x一定能放在這些數放的位置&#xff0c;所以直接交換即可)所以可以直接…

SSD列子

一、介紹 本博文主要介紹實現通過SSD物體檢測方式實現工件裂紋檢測。裂紋圖像如下所示&#xff1a; 二、關于SSD算法 具體算法不再闡述&#xff0c;詳細請參考&#xff1a; https://blog.csdn.net/u013989576/article/details/73439202 https://blog.csdn.net/xiaohu2022/arti…

linux硬鏈接與軟鏈接

Linux 系統中有軟鏈接和硬鏈接兩種特殊的“文件”。 軟鏈接可以看作是Windows中的快捷方式&#xff0c;可以讓你快速鏈接到目標檔案或目錄。 硬鏈接則透過文件系統的inode來產生新檔名&#xff0c;而不是產生新檔案。 創建方法都很簡單&#xff1a; 軟鏈接&#xff08;符號鏈接…

int轉時間

int轉時間 public static string FormatDuration(int duration) { if (duration 0) return "00:00:00"; int hours duration / 3600; int minutes duration % 3600 / 60; int seconds duration % 3600 % 60; string _hours hours.ToString("00") &qu…

企業級區塊鏈現狀研究報告:小企業的投資總額是大企業的28倍

根據企業級區塊鏈現狀研究報告表明&#xff0c;當前企業采用區塊鏈技術的勢頭正在逐步增強。參與該報告的企業表示&#xff0c;區塊鏈投資今年共增長了 62% &#xff0c;預計到 2025 年區塊鏈將成為主流技術。其中&#xff0c;有 28% 的企業正在積極開展區塊鏈發展計劃。現在看…

特征匹配

Python 使用Opencv實現圖像特征檢測與匹配 2018-06-13 11:36:58 Xy-Huang 閱讀數 19203更多 分類專欄&#xff1a; Python 人工智能 版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 本文鏈接…

bzoj 1015 并查集

代碼&#xff1a; //這題可以反著想&#xff0c;把要去掉的點倒著處理變成往圖中一個一個的加點&#xff0c;然后用并查集處理聯通快就好了。 #include<iostream> #include<cstdio> #include<cstring> #include<vector> using namespace std; const in…

頁面中切換echarts主題

要做的效果是&#xff1a;點擊下拉框切換echarts主題 下面是效果圖&#xff1a; 項目環境&#xff1a; vue ts es6 echarts(4.2.1) 步驟 安裝依賴&#xff0c; npm install echarts -S / yarn add echarts -S引入主題 參考鏈接選擇下拉框中的主題時&#xff0c;拿到圖表主題…

畫極線

OpenCV學習日記5 2017-05-27 10:44:35 1000sprites 閱讀數 2339更多 分類專欄&#xff1a; 計算機視覺 版權聲明&#xff1a;本文為博主原創文章&#xff0c;遵循 CC 4.0 BY-SA 版權協議&#xff0c;轉載請附上原文出處鏈接和本聲明。 本文鏈接&#xff1a;https://blog.cs…

Win10開啟Administrator超級管理員賬戶

方法1 1、在系統的開始菜單上&#xff0c;我們單擊鼠標右鍵&#xff0c;然后選擇計算機管理打開進入 2、打開的計算機管理窗口&#xff0c;點擊本地用戶和組中的用戶打開&#xff0c;然后點擊右側的Administrator賬戶&#xff0c;雙擊鼠標打開進入 3、打開的屬性窗口中&#xf…

Mysql異常問題排查與處理——mysql的DNS反向解析和客戶端網卡重啟

中午剛想趴一會&#xff0c;不料鍋從天降&#xff01;&#xff01;&#xff01;Mysql連不上了。。。。。。。 現象如下&#xff1a; 現象1&#xff1a;登錄mysql所在服務器&#xff0c;連接MySQL 成功&#xff1b; 現象2&#xff1a;通過客戶端遠程連接MySQL&#xff0c;返回失…

最近很火的MySQL:拋開復雜的架構設計,MySQL優化思想基本都在這

優化一覽圖 優化 筆者將優化分為了兩大類&#xff1a;軟優化和硬優化。軟優化一般是操作數據庫即可&#xff1b;而硬優化則是操作服務器硬件及參數設置。 1、軟優化 1&#xff09;查詢語句優化 首先我們可以用EXPLAIN或DESCRIBE(簡寫:DESC)命令分析一條查詢語句的執行信息。 例…