Skip to content

Commit cd27a57

Browse files
committed
回転を実装
1 parent 0440bb9 commit cd27a57

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

quaternion.h

+18-7
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@ namespace qtnion{
1919
/**
2020
* @brief 四元数を表す構造体。
2121
*/
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 ℍ
2926
/**
3027
* @brief 四元数に対する通常の加算
3128
* @param rhs 加数
@@ -96,4 +93,18 @@ namespace qtnion{
9693
*/
9794
template <typename T>
9895
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);}
99110
}

0 commit comments

Comments
 (0)