@@ -19,13 +19,10 @@ namespace qtnion{
19
19
/* *
20
20
* @brief 四元数を表す構造体。
21
21
*/
22
- quaternion () {one = i = j = k = 0 ;}
23
- quaternion (T one_,T i_ , T j_,T k_) {
24
- one = one_;
25
- i=i_;
26
- j=j_;
27
- k=k_;
28
- }
22
+ quaternion () {one = i = j = k = 0 ;}// 0
23
+ quaternion (T one_,T i_=0 ) { one = one_; i=i_; j = k = 0 ;}// From ℝ and ℂ
24
+ quaternion (T i_,T j_,T k_) {one = 0 ; i = i_; j=j_; k=k_;}// From 3D vector
25
+ quaternion (T one_,T i_ , T j_,T k_) { one = one_; i=i_; j=j_; k=k_;}// From ℍ
29
26
/* *
30
27
* @brief 四元数に対する通常の加算
31
28
* @param rhs 加数
@@ -96,4 +93,18 @@ namespace qtnion{
96
93
*/
97
94
template <typename T>
98
95
inline quaternion<T> normalize (quaternion<T> val) {return val/norm (val);}
96
+ /* *
97
+ * @brief 四元数を3次元空間での回転から作る
98
+ * @attention 与えられる空間ベクトルは正規化済みであることを前提とする。
99
+ * @return 回転軸と回転角度から求められる四元数
100
+ */
101
+ template <typename T>
102
+ inline quaternion<T> polarturn (T x,T y,T z,T theta){
103
+ return {cos (theta/2 ),x*sin (theta/2 ),y*sin (theta/2 ),z*sin (theta/2 )};}
104
+ /* *
105
+ * @brief 空間ベクトルを四元数に基づいて回転させる
106
+ * @return 空間ベクトルを回転させたものを表す四元数
107
+ */
108
+ template <typename T>
109
+ inline quaternion<T> turn3Dvec (quaternion<T> v,quaternion<T> q){return q*v*conjugate (q);}
99
110
}
0 commit comments