FineKernelToolKit 4.2.13
読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
FK::fk_Matrix クラス

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

#include <FK/Matrix.h>

+ FK::fk_Matrix の継承関係図
+ FK::fk_Matrix 連携図

公開メンバ関数

 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)
 逆行列化関数
 
bool covariant (void)
 反変変換行列化関数
 
void makeScale (double x, double y, double z)
 拡大縮小行列生成関数1
 
void makeScale (const fk_Vector &V)
 拡大縮小行列生成関数2
 
void makePerspective (double fovy, double near, double far, double aspect)
 簡易透視投影変換行列生成関数
 
void makeFrustum (double left, double right, double bottom, double top, double near, double far)
 一般透視投影変換行列生成関数
 
void makeOrtho (double left, double right, double bottom, double top, double near, double far)
 平行投影変換行列生成関数
 
- 基底クラス FK::fk_OrthoMatrix に属する継承公開メンバ関数
 fk_OrthoMatrix (void)
 コンストラクタ
 
 fk_OrthoMatrix (const fk_OrthoMatrix &)
 コピーコンストラクタ
 
 ~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 &V)
 行ベクトル成分設定関数1
 
void setRow (int row, const fk_HVector &V)
 行ベクトル成分設定関数2
 
void setCol (int col, const fk_Vector &V)
 列ベクトル成分設定関数1
 
void setCol (int col, const fk_HVector &V)
 列ベクトル成分設定関数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)
 オイラー角回転行列生成関数2
 

詳解

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

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

行列同士の演算の他、ベクトルとの積演算(一次変換)も fk_Vectorfk_HVector クラスを用いて行えます。 FKでは行列は MV 行列系を採用しています。 従って、行列とベクトルの積演算においては行列が左側、ベクトルは右側となり、 ベクトルは列ベクトルとして扱われます。 また、行列積による合成変換を生成した場合、 変換は右側の行列から行われることになります。

行列とベクトルの積に fk_Vector 型を用いた場合、 同次座標が 1 である fk_HVector 型として扱われます。

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

参照
fk_OrthoMatrix, fk_GenMatrix, fk_Vector, fk_HVector

構築子と解体子

◆ fk_Matrix() [1/2]

FK::fk_Matrix::fk_Matrix ( void  )

コンストラクタ

単位行列を生成します。

◆ fk_Matrix() [2/2]

FK::fk_Matrix::fk_Matrix ( const fk_Matrix )

コピーコンストラクタ

関数詳解

◆ operator!()

fk_Matrix FK::fk_Matrix::operator! ( void  ) const

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

M_new = !M_org;

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

◆ operator==()

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

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

if(M1 == M2) {
    :
    :
}

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

◆ operator!=()

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

異値比較演算子

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

if(M1 != M2) {
    :
    :
}

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

◆ operator=() [1/2]

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

単純代入演算子

◆ operator=() [2/2]

fk_Matrix & FK::fk_Matrix::operator= ( const fk_OrthoMatrix )

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

◆ operator+=() [1/2]

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

行列和代入演算子1

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

M1 += M2;

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

M1 = M1 + M2;

◆ operator+=() [2/2]

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

行列和代入演算子2

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

◆ operator-=() [1/2]

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

行列差代入演算子1

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

M1 -= M2;

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

M1 = M1 - M2;

◆ operator-=() [2/2]

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

行列差代入演算子2

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

◆ operator*=() [1/2]

fk_Matrix & FK::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 \) に代入したいときには、この演算子は利用できません。

◆ operator*=() [2/2]

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

行列積代入演算子2

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

◆ isRegular()

bool FK::fk_Matrix::isRegular ( void  ) const

正則判定関数

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

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

◆ isSingular()

bool FK::fk_Matrix::isSingular ( void  ) const

特異判定関数

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

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

◆ inverse()

bool FK::fk_Matrix::inverse ( void  )

逆行列化関数

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

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

◆ covariant()

bool FK::fk_Matrix::covariant ( void  )

反変変換行列化関数

現在設定されている行列に対し、正則行列であれば自身を反変変換行列化します。 特異(非正則)行列である場合は「失敗」とし、成分値を変更しません。 この変換は、法線ベクトルをはじめとする共変ベクトルに対する変換に利用します。

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

◆ makeScale() [1/2]

void FK::fk_Matrix::makeScale ( double  x,
double  y,
double  z 
)

拡大縮小行列生成関数1

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

引数
[in]xx方向の拡大縮小率
[in]yy方向の拡大縮小率
[in]zz方向の拡大縮小率

◆ makeScale() [2/2]

void FK::fk_Matrix::makeScale ( const fk_Vector V)

拡大縮小行列生成関数2

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

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

◆ makePerspective()

void FK::fk_Matrix::makePerspective ( double  fovy,
double  near,
double  far,
double  aspect 
)

簡易透視投影変換行列生成関数

透視投影変換行列を生成します。 この関数では、視野錐台が上下左右で対称であることを前提としています。 非対称な視野錐台の場合は makeFrustum() を利用してください。

引数
[in]fovy水平視野角
[in]near前方クリッピング距離
[in]far後方クリッピング距離
[in]aspectアスペクト比
参照
makeFrustum(), makeOrtho()

◆ makeFrustum()

void FK::fk_Matrix::makeFrustum ( double  left,
double  right,
double  bottom,
double  top,
double  near,
double  far 
)

一般透視投影変換行列生成関数

透視投影変換行列を生成します。 この関数は、視野錐台が非対称であっても生成可能です。 上下左右が対称である場合は、 makePerspective() も利用可能です。

引数
[in]left視野錐台左端距離
[in]right視野錐台右端距離
[in]bottom視野錐台下端距離
[in]top視野錐台上端距離
[in]near前方クリッピング距離
[in]far後方クリッピング距離
参照
makePerspective(), makeOrtho()

◆ makeOrtho()

void FK::fk_Matrix::makeOrtho ( double  left,
double  right,
double  bottom,
double  top,
double  near,
double  far 
)

平行投影変換行列生成関数

平行投影変換行列を生成します。

引数
[in]left視野空間左端距離
[in]right視野空間右端距離
[in]bottom視野空間下端距離
[in]top視野空間上端距離
[in]near前方クリッピング距離
[in]far後方クリッピング距離
参照
makePerspective(), makeFrustum()