2014-04-19 52 views
2

我在使用雙四元數的麻煩,我相信這是因爲他們沒有正確歸。 A,B和A」是其中後者偶聯雙重四元數。當這樣做: Q = A * B * A」 我理論上應該總是符合Q = B結束,如果A和B是正確的正常化。但在某些情況下,我不這樣做,而且這完全搞亂了我的整個骨架層次結構。正確正火的雙四元數

許多網頁顯示,雙四元數的範數||常見問題|| = sqrt(QQ'),但這意味着取雙數的平方根,我不知道該怎麼做。所以現在我只是把整個事情分爲真實部分的長度。

我一直在尋找身邊好幾天,但我仍然還沒有找到如何使用雙四元一個很好的代碼示例。我覺得我很瞭解這個理論,但是我仍然無法完成它的工作。

回答

0

並不太難。對計算機圖形感興趣的只有單位雙四元數,即|| Q || = 1.這導致:

QQ' = (R, D)(R*, D*) = (RR*, RD* + DR*) = (1, 0) 

Q =雙四元數。 R =實數部分,D =雙部分。你看,對於單位雙四元組來說,雙重部分消失了。您只需要計算實部的大小。所以這個問題被簡化爲計算簡單四元數的大小。 ( - R 4是4D向量R的部件R1)

現在只需劃分R/|| ||ř

||R|| = sqrt(r1^2+r2^2+r3^2+r4^2) 

:和,因爲它是用於複數進行所計算出的類似和D/|| R ||你有你的歸一化Q.

0

我最近學習雙四元組,剛剛遇到同樣的問題,我會嘗試給我的答案,糾正我,如果有什麼是錯的。

爲了標準化一個雙四元數,比如說Q = a + eb,我們可以用|| Q ||來分割它。我們需要計算Q的規範,這可以用下面的公式來完成,

norm of a dual quaternion

然後我們就可以通過

normalize a dual quaternion

0

計算標準化從GLM源代碼:

template <typename T, precision P> 
GLM_FUNC_QUALIFIER tdualquat<T, P> normalize(tdualquat<T, P> const & q) 
{ 
    return q/length(q.real); 
} 

我檢查了operator/的實現。它只是將一個四元數與一個浮點數分開。