簡體   English   中英

給定兩個指定方向的3D旋轉

[英]3D rotation, given two specified directions

我有兩個垂直單位向量,p和q; 我認為它嵌入在3D空間中的某些剛性物體中。 我希望旋轉對象,使p現在指向正x軸,q指向正y軸。

我在c#中編程並使用四元數來計算旋轉。 如何創建將執行所需旋轉的四元數?

如果您想象四元數的逆運算,那么您就知道點(1,0,0)轉到p,而(0,1,0)轉到q。 類似地,點(0,0,1)將到達等於p和q的叉積的點z。

因此,您實際上具有反向旋轉的矩陣表示。 第一列是p,第二列是q,第三列是p交叉q。

所以你想要的旋轉矩陣是由這個矩陣的轉置給出的,即第一行是p,第二行是q,第三行是p cross q。

所以我建議你只需調用一個庫例程,從這個矩陣轉換為四元數形式。

您可能對此文檔感興趣, 關於Doom3解釋用於將矩陣轉換為四元數的算法Id軟件 - 包括優化的x86匯編程序代碼。

正交矩陣

如果我們有一個矩陣M,其中列(a,b,c)形成一個正交集,那么我們知道a'a = b'b = c'c = 1,a'b = ... = c'a = 0。

因此M'M = I.

如果我們在左邊乘以M,在右邊乘以inv(M),我們發現:

M.M'.M.inv(M) = M.inv(M)
=> M.M'.(M.inv(M)) = M.inv(M) = I
=> M.M' = I

因此,如果我們有正交列,我們必須也有正交行,矩陣M稱為正交矩陣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM