Boost C++ Libraries Home Libraries People FAQ More

PrevUpHomeNext

Quaternion 創建函數

template<typename T>	quaternion<T>	spherical(T const & rho, T const & theta, T const & phi1, T const & phi2);
template<typename T>	quaternion<T>	semipolar(T const & rho, T const & alpha, T const & theta1, T const & theta2);
template<typename T>	quaternion<T>	multipolar(T const & rho1, T const & theta1, T const & rho2, T const & theta2);
template<typename T>	quaternion<T>	cylindrospherical(T const & t, T const & radius, T const & longitude, T const & latitude);
template<typename T>	quaternion<T>	cylindrical(T const & r, T const & angle, T const & h1, T const & h2);

這些函數通過類似於極坐標構造複數的方式來構造四元數, 因為沒有嚴格等價的相對應於四元數的極坐標系.

球面 是一種簡單的 極坐標變換, 它以一個距離(magnitude)(正的),以及一個超球面上的由三個角度給定的點作為輸入 第一個角度, theta 有一個固有的 從-pi 到 +pi 的範圍, 而其它的兩個角度有一個固有的從 -pi/2 到 +pi/2的範圍 (類似於R3 空間上的球面坐標系). 由於對稱性和週期性, 由於存在大量的對稱性和週期性,如果這個距離是負數 ( 譯注:嚴格意義上來講,距離是非負的,作者這裡所說的 距離為負數是指使用這個函數的程序員將一個負值作為距離值傳遞給這個函數) 或者這個角度超過 了它的自然的分佈範圍也不會有什麼麻煩的問題產生. 然而,預期的退化仍然會發生(一個大小為0的距離將會使得角度設置值被忽略...).

圓柱 也是柱面坐標繫在通常的R3 空間(譯注:就是數學中通常所說的三維坐標空間)上的變換, 柱面坐標反過來也是平面極坐標的另一個派生. 最開始的兩個輸入(函數的最開始的兩個參數)是這個四元數的第一個 C ( 譯註::在數學中 C 表示複數域) 成員的極坐標. 第三個和第四個輸入(函數的第三個和第四個參數)分別放入這個四元數的R ( 譯註::在數學中 R 表示實數域) 成員中.

多極(multipolar) 是極坐標系的另一個泛化. 這一次, 四元數的兩個C 成員都由極坐標給定.

cylindrospherical 特定於四元數. 通常把H(四元數集) 看作是RR3的笛卡爾積是一件 有趣的事情(四元數乘法因此有一種特殊的形式, 就像這裡給定的一樣). 這個函數因此基於這種表現形式來構造一個四元數, R3 成員由通常的R3 球面坐標給定.

半極化(semipolar) 是另一個特定於 四元數的發生器(generator).它把第一個輸入參數作為四元數的大小, 第二個參數是一個範圍在 0+pi/2 的角度,進而 這個四元數的最開始的兩個 C 成員的大小 分別是第一個參數和這個角度的sin 和 cos 乘積, 最後的第三個和第四個參數是範圍在-pi/2+pi/2 的角度,分別用於描述這個四元數的第一個和第二個C components 成員的大小變化. 像平常一樣, 如果這個距離是負數或者這些角度超過 了它的自然的分佈範圍也不會有什麼麻煩的問題產生, 因為對稱性和週期性很好的解決了這些問題.

在這種實現版本的四元數中, 並沒有以複數值為參數的構造四元數的操作,因為這種情況頗為複雜. 四元數可以與R3R4 中的旋轉相關聯起來, 並且這種聯繫不是太複雜, 但是這一點仍然缺少標準的矩陣庫(事實上或理論上的) 能進行這種轉換. 這一點可能會在將來的版本中進行改進. 同時, 這裡提供了一個如何進行這種轉換的針對於 R3, 和針對於 R4 的例子 (例子測試文件).


PrevUpHomeNext