FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
構成 | 関数
Quaternion.h
+ Quaternion.hのインクルード依存関係図
+ このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。

ソースコードを見る。

構成

class  fk_Quaternion
 四元数(クォータニオン)を管理するクラス [詳細]
 

関数

fk_Quaternion operator* (const fk_Quaternion &, const fk_Quaternion &)
 四元数積二項演算子 [詳細]
 
fk_Quaternion operator+ (const fk_Quaternion &, const fk_Quaternion &)
 四元数和二項演算子 [詳細]
 
fk_Quaternion operator- (const fk_Quaternion &, const fk_Quaternion &)
 四元数差二項演算子 [詳細]
 
fk_Quaternion operator* (const fk_Quaternion &, double)
 四元数スカラー倍二項演算子1 [詳細]
 
fk_Quaternion operator* (double, const fk_Quaternion &)
 四元数スカラー倍二項演算子2 [詳細]
 
fk_Quaternion operator/ (const fk_Quaternion &, double)
 四元数スカラー商二項演算子 [詳細]
 
fk_Vector operator* (const fk_Quaternion &, const fk_Vector &)
 四元数ベクトル変換二項演算子 [詳細]
 
double operator^ (const fk_Quaternion &, const fk_Quaternion &)
 四元数内積二項演算子 [詳細]
 
fk_Quaternionfk_Q_Inter_Linear (const fk_Quaternion &, const fk_Quaternion &, double)
 
fk_Quaternionfk_Q_Inter_Sphere (const fk_Quaternion &, const fk_Quaternion &, double)
 

関数

fk_Quaternion operator* ( const fk_Quaternion ,
const fk_Quaternion  
)

四元数積二項演算子

2つの四元数 $\mathbf{q}_1, \mathbf{q}_2$ に対し、 それぞれのスカラー部とベクトル部を以下のように記述するとします。

\[ \mathbf{q}_1 = s_1 + \mathbf{V}_1, \; \mathbf{q}_2 = s_2 + \mathbf{V}_2 \]

このとき、四元数の積は以下のように定義されます。

\[ \mathbf{q}_1\mathbf{q}_2 = \left(s_1s_2 - \mathbf{V}_1\cdot\mathbf{V}_2\right) + \left(s_1\mathbf{V}_2+s_2\mathbf{V}_1 + \mathbf{V}_1 \times \mathbf{V}_2\right) \]

これを得るには、以下のように記述します。 q1, q2, q はいずれも fk_Quaternion 型の変数です。

q = q1 * q2;

四元数の積は、四元数を回転変換として考えたとき、合成変換を生成することを意味します。 なお、四元数の積は交換法則は成り立ちません。

fk_Quaternion operator+ ( const fk_Quaternion ,
const fk_Quaternion  
)

四元数和二項演算子

四元数の和は、全ての成分同士を加算することで定義されます。 四元数 q1 と q2 の和を得るには、以下のように記述します。 q1, q2, q はいずれも fk_Quaternion 型の変数です。

q = q1 + q2;
fk_Quaternion operator- ( const fk_Quaternion ,
const fk_Quaternion  
)

四元数差二項演算子

四元数の差は、全ての成分同士を減算することで定義されます。 四元数 q1 と q2 の差を得るには、以下のように記述します。 q1, q2, q はいずれも fk_Quaternion 型の変数です。

q = q1 - q2;
fk_Quaternion operator* ( const fk_Quaternion ,
double   
)

四元数スカラー倍二項演算子1

四元数のスカラー倍は、全ての成分に与えられた実数を掛けることで定義されます。 これを得るには、以下のように記述します。 q1, q2 はいずれも fk_Quaternion 型の変数で、d は double 型の変数です。

q2 = q1 * d;

なお、四元数と実数の順番は逆でも構いません。

fk_Quaternion operator* ( double  ,
const fk_Quaternion  
)

四元数スカラー倍二項演算子2

四元数のスカラー倍は、全ての成分に与えられた実数を掛けることで定義されます。 これを得るには、以下のように記述します。 q1, q2 はいずれも fk_Quaternion 型の変数で、d は double 型の変数です。

q2 = d * q1;

なお、四元数と実数の順番は逆でも構いません。

fk_Quaternion operator/ ( const fk_Quaternion ,
double   
)

四元数スカラー商二項演算子

四元数のスカラー商は、全ての成分を与えられた実数で割ることで定義されます。 これを得るには、以下のように記述します。 q1, q2 はいずれも fk_Quaternion 型の変数で、d は double 型の変数です。

q2 = q1 / d;
fk_Vector operator* ( const fk_Quaternion ,
const fk_Vector  
)

四元数ベクトル変換二項演算子

四元数は、数学的には任意軸回転変換を表現します。 一つの四元数 $ \mathbf{q} $ は3次元ベクトル $\mathbf{V}$ に対し、

\[ \mathbf{V}' = \mathbf{q}\mathbf{V}\mathbf{q}^{-1} \]

という演算によって回転変換したベクトル $\mathbf{V}'$ を求めることができます。

上記の変換ベクトルを得るには、以下のように記述します。 v1, v2 はともに fk_Vector 型の変数、q は fk_Quaternion 型の変数です。 v1 が元のベクトル、v2 が変換後のベクトルを意味します。

v2 = q * v1;
double operator^ ( const fk_Quaternion ,
const fk_Quaternion  
)

四元数内積二項演算子

2つの四元数 $\mathbf{q}_1 = s_1 + x_1i + y_1j + z_1k, \; \mathbf{q}_2 = s_2 + x_2i + y_2j + z_2k $ の内積(スカラー積)は、以下のように定義されます。

\[ \mathbf{q}_1\cdot\mathbf{q}_2 = s_1s_2 + x_1x_2 + y_1y_2 + z_1z_2 \]

これを得るには、以下のように記述します。 q1, q2 は fk_Quaternion 型の変数、d は double 型の変数です。

d = q1 ^ q2;

なお、四元数の内積は交換法則が成り立ちます。

覚え書き
ここで演算子として採用されている「^」は、 C++ の仕様上あまり演算子としての優先度が高くありません。 そのため、括弧を適切に使用しないと本来の意図と異なる結果を生じるおそれがあります。
fk_Quaternion& fk_Q_Inter_Linear ( const fk_Quaternion ,
const fk_Quaternion ,
double   
)
fk_Quaternion& fk_Q_Inter_Sphere ( const fk_Quaternion ,
const fk_Quaternion ,
double   
)