FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Public メソッド | すべてのメンバ一覧
クラス fk_Matrix

一般4元正方行列を管理するクラス [詳細]

+ fk_Matrixに対する継承グラフ
+ fk_Matrixのコラボレーション図

Public メソッド

 fk_Matrix (void)
 コンストラクタ [詳細]
 
 fk_Matrix (const fk_Matrix &)
 コピーコンストラクタ [詳細]
 
単項演算子
fk_Matrix operator! (void) const
 逆行列取得演算子 [詳細]
 
比較演算子
bool operator== (const fk_Matrix &) const
 同値比較演算子 [詳細]
 
bool operator!= (const fk_Matrix &) const
 異値比較演算子 [詳細]
 
代入演算子
fk_Matrixoperator= (const fk_Matrix &)
 単純代入演算子 [詳細]
 
fk_Matrixoperator= (const fk_OrthoMatrix &)
 fk_OrthoMatrix 型からの単純代入演算子 [詳細]
 
fk_Matrixoperator+= (const fk_Matrix &)
 行列和代入演算子1 [詳細]
 
fk_Matrixoperator+= (const fk_OrthoMatrix &)
 行列和代入演算子2 [詳細]
 
fk_Matrixoperator-= (const fk_Matrix &)
 行列差代入演算子1 [詳細]
 
fk_Matrixoperator-= (const fk_OrthoMatrix &)
 行列差代入演算子2 [詳細]
 
fk_Matrixoperator*= (const fk_Matrix &)
 行列積代入演算子1 [詳細]
 
fk_Matrixoperator*= (const fk_OrthoMatrix &)
 行列積代入演算子2 [詳細]
 
メンバ関数
bool isRegular (void) const
 正則判定関数 [詳細]
 
bool isSingular (void) const
 特異判定関数 [詳細]
 
bool inverse (void)
 逆行列化関数 [詳細]
 
void makeScale (double x, double y, double z)
 拡大縮小行列生成関数1 [詳細]
 
void makeScale (const fk_Vector &v)
 拡大縮小行列生成関数2 [詳細]
 
- Public メソッド inherited from fk_OrthoMatrix
 fk_OrthoMatrix (void)
 コンストラクタ [詳細]
 
 fk_OrthoMatrix (const fk_OrthoMatrix &)
 コピーコンストラクタ [詳細]
 
fk_OrthoMatrix operator! (void) const
 逆行列取得演算子 [詳細]
 
double * operator[] (int)
 成分参照演算子 [詳細]
 
bool operator== (const fk_OrthoMatrix &) const
 同値比較演算子 [詳細]
 
bool operator!= (const fk_OrthoMatrix &) const
 異値比較演算子 [詳細]
 
fk_OrthoMatrixoperator= (const fk_OrthoMatrix &)
 単純代入演算子 [詳細]
 
fk_OrthoMatrixoperator*= (const fk_OrthoMatrix &)
 行列積代入演算子 [詳細]
 
void init (void)
 単位行列化関数 [詳細]
 
void set (int row, int col, double value)
 成分設定関数 [詳細]
 
void setRow (int row, const fk_Vector &vec)
 行ベクトル成分設定関数1 [詳細]
 
void setRow (int row, const fk_HVector &vec)
 行ベクトル成分設定関数2 [詳細]
 
void setCol (int col, const fk_Vector &vec)
 列ベクトル成分設定関数1 [詳細]
 
void setCol (int col, const fk_HVector &vec)
 列ベクトル成分設定関数2 [詳細]
 
fk_HVector getRow (int row)
 行ベクトル成分取得関数 [詳細]
 
fk_HVector getCol (int col)
 列ベクトル成分取得関数 [詳細]
 
bool inverse (void)
 逆行列化関数 [詳細]
 
void negate (void)
 転置化関数 [詳細]
 
void makeRot (double rad, fk_Axis axis)
 座標軸回転行列生成関数 [詳細]
 
void makeTrans (double x, double y, double z)
 平行移動行列生成関数1 [詳細]
 
void makeTrans (const fk_Vector &v)
 平行移動行列生成関数2 [詳細]
 
void makeEuler (double h, double p, double b)
 オイラー角回転行列生成関数1 [詳細]
 
void makeEuler (const fk_Angle &angle)
 オイラー角回転行列生成関数1 [詳細]
 

フレンド

二項演算子
fk_HVector operator* (const fk_Matrix &, const fk_HVector &)
 ベクトル変換二項演算子 [詳細]
 
fk_Matrix operator* (const fk_Matrix &, const fk_Matrix &)
 行列積二項演算子 [詳細]
 
fk_Matrix operator* (double, const fk_Matrix &)
 行列実数倍二項演算子1 [詳細]
 
fk_Matrix operator* (const fk_Matrix &, double)
 行列実数倍二項演算子2 [詳細]
 
fk_Matrix operator+ (const fk_Matrix &, const fk_Matrix &)
 行列和二項演算子 [詳細]
 
fk_Matrix operator- (const fk_Matrix &, const fk_Matrix &)
 行列差二項演算子 [詳細]
 
二項演算子

説明

一般4元正方行列を管理するクラス

このクラスは、一般4元正方行列に関する様々な機能を提供します。 このクラスは、 fk_OrthoMatrix クラスから派生しており、 多くの重要な機能は fk_OrthoMatrix から継承していますので、 そちらの解説も合わせて参照して下さい。

直交行列のみを扱う場合は fk_OrthoMatrix を利用して下さい。 任意元の正方行列を扱う場合は fk_GenMatrix を利用して下さい。

参照
fk_OrthoMatrix, fk_GenMatrix, fk_Vector, fk_HVector

コンストラクタとデストラクタ

fk_Matrix::fk_Matrix ( void  )

コンストラクタ

単位行列を生成します。

fk_Matrix::fk_Matrix ( const fk_Matrix )

コピーコンストラクタ

関数

fk_Matrix fk_Matrix::operator! ( void  ) const

逆行列取得演算子

以下のコードは、M_org の逆行列を M_new に代入します。

M_new = !M_org;

このとき、M_org は変化しません。 もし M_org が特異行列であった場合は、M_new は M_org と同値となります。

bool fk_Matrix::operator== ( const fk_Matrix ) const

同値比較演算子

fk_Matrix では、以下のように記述することで、 M1 と M2 が等しいかどうかを判断できます。

if(M1 == M2) {
    :
    :
}

ここでの比較は、各成分の比較において FK_MATRIX_EPS までの数値誤差を許容しています。

bool fk_Matrix::operator!= ( const fk_Matrix ) const

異値比較演算子

fk_Matrix では、以下のように記述することで、 M1 と M2 が等しくないかどうかを判断できます。

if(M1 != M2) {
    :
    :
}

ここでの比較は、各成分の比較において FK_MATRIX_EPS までの数値誤差を許容しています。

fk_Matrix& fk_Matrix::operator= ( const fk_Matrix )

単純代入演算子

fk_Matrix& fk_Matrix::operator= ( const fk_OrthoMatrix )

fk_OrthoMatrix 型からの単純代入演算子

fk_Matrix& fk_Matrix::operator+= ( const fk_Matrix )

行列和代入演算子1

以下のコードは、M1 と M2 の行列和を 前の M1 の値は破棄して改めて M1 に設定します。

M1 += M2;

これは、以下のコードと同義です。

M1 = M1 + M2;
fk_Matrix& fk_Matrix::operator+= ( const fk_OrthoMatrix )

行列和代入演算子2

「行列和代入演算子1」と同義ですが、 右辺が fk_OrthoMatrix 型の場合に対応する演算子です。

fk_Matrix& fk_Matrix::operator-= ( const fk_Matrix )

行列差代入演算子1

以下のコードは、M1 と M2 の行列差を 前の M1 の値は破棄して改めて M1 に設定します。

M1 -= M2;

これは、以下のコードと同義です。

M1 = M1 - M2;
fk_Matrix& fk_Matrix::operator-= ( const fk_OrthoMatrix )

行列差代入演算子2

「行列差代入演算子1」と同義ですが、 右辺が fk_OrthoMatrix 型の場合に対応する演算子です。

fk_Matrix& fk_Matrix::operator*= ( const fk_Matrix )

行列積代入演算子1

以下のコードは、M1 と M2 の行列積を 前の M1 の値は破棄して改めて M1 に設定します。

M1 *= M2;

これは、以下のコードと同義です。

M1 = M1 * M2;
覚え書き
行列積は交換法則が成り立たないため、 $ \mathbf{M}_2\mathbf{M}_1 $$ \mathbf{M}_1 $ に代入したいときには、この演算子は利用できません。
fk_Matrix& fk_Matrix::operator*= ( const fk_OrthoMatrix )

行列積代入演算子2

「行列積代入演算子1」と同義ですが、 右辺が fk_OrthoMatrix 型の場合に対応する演算子です。

bool fk_Matrix::isRegular ( void  ) const

正則判定関数

行列が正則であるかどうかを判定します。 正則行列とは、逆行列が存在する行列のことです。

戻り値
正則であれば true を、そうでなければ false を返します。
参照
inverse(), isSingular()
bool fk_Matrix::isSingular ( void  ) const

特異判定関数

行列が特異であるかどうかを判定します。 特異行列とは、逆行列が存在しない行列のことです。 これは「非正則行列」と同義になります。

戻り値
特異であれば true を、そうでなければ false を返します。
参照
inverse(), isRegular()
bool fk_Matrix::inverse ( void  )

逆行列化関数

現在設定されている行列に対し、正則行列であれば自身を逆行列化します。 特異(非正則)行列である場合は「失敗」とし、成分値を変更しません。

戻り値
行列が正則である場合、逆行列化して true を返します。 特異行列であった場合は、成分値を変更せずに false を返します。
参照
isRegular(), isSingular()
void fk_Matrix::makeScale ( double  x,
double  y,
double  z 
)

拡大縮小行列生成関数1

各座標軸方向への拡大縮小率を個別に設定した行列を生成します。

引数
[in]xx方向の拡大縮小率
[in]yy方向の拡大縮小率
[in]zz方向の拡大縮小率
void fk_Matrix::makeScale ( const fk_Vector v)

拡大縮小行列生成関数2

各座標軸方向への拡大縮小率を個別に設定した行列を生成します。 引数のベクトルの各成分が、軸方向の拡大縮小率と対応します。

引数
[in]v拡大縮小率ベクトル

フレンドと関連する関数

fk_HVector operator* ( const fk_Matrix ,
const fk_HVector  
)
friend

ベクトル変換二項演算子

4次元ベクトル V1 の、行列 M による変換ベクトル V2 を求めるには、 以下のように記述します。 V1, V2 は共に fk_HVector 型の変数で、M は fk_Matrix 型の変数です。

V2 = M * V1;

FK では行列体系として MV 系を採用しており、 行列のベクトル変換の際には行列が左側、ベクトルが右側である必要があります。

以下のコードは、fk_HVector 型の変数 V_org を fk_Matrix 型の変数 M によって変換した値を、 fk_HVector 型変数 V_new に代入します。

V_new = M * V_org;

FK では行列体系として MV 系を採用しており、 行列のベクトル変換の際には行列が左側、ベクトルが右側である必要があります。

fk_Matrix operator* ( const fk_Matrix ,
const fk_Matrix  
)
friend

行列積二項演算子

行列 M1, M2 の行列積 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型の変数です。

M3 = M1 * M2;
覚え書き
行列積は交換法則が成り立たないため、 $ \mathbf{M}_1\mathbf{M}_2 $$ \mathbf{M}_2\mathbf{M}_1 $ は一般的に結果が異なります。
fk_Matrix operator* ( double  ,
const fk_Matrix  
)
friend

行列実数倍二項演算子1

行列 M1 のスカラー倍行列をエルには、以下のように記述します。 M1, M2 はいずれも fk_Matrix 型の変数で、d は double 型の変数です。

M2 = d * M1;

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

fk_Matrix operator* ( const fk_Matrix ,
double   
)
friend

行列実数倍二項演算子2

行列 M1 のスカラー倍行列をエルには、以下のように記述します。 M1, M2 はいずれも fk_Matrix 型の変数で、d は double 型の変数です。

M2 = M1 * d;

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

fk_Matrix operator+ ( const fk_Matrix ,
const fk_Matrix  
)
friend

行列和二項演算子

行列 M1, M2 の行列和 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型です。

M3 = M1 + M2;
覚え書き
行列和は交換法則が成り立ちます。
fk_Matrix operator- ( const fk_Matrix ,
const fk_Matrix  
)
friend

行列差二項演算子

行列 M1, M2 の行列差 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型です。

M3 = M1 - M2;
覚え書き
行列差は交換法則が成り立ちません。