FineKernelToolKit: FK::fk_Matrix クラス

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
公開メンバ関数 | 全メンバ一覧
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_Matrix & | operator= (const fk_Matrix &)
| 単純代入演算子
fk_Matrix & | operator= (const fk_OrthoMatrix &)
| fk_OrthoMatrix 型からの単純代入演算子
fk_Matrix & | operator+= (const fk_Matrix &)
| 行列和代入演算子1
fk_Matrix & | operator+= (const fk_OrthoMatrix &)
| 行列和代入演算子2
fk_Matrix & | operator-= (const fk_Matrix &)
| 行列差代入演算子1
fk_Matrix & | operator-= (const fk_OrthoMatrix &)
| 行列差代入演算子2
fk_Matrix & | operator*= (const fk_Matrix &)
| 行列積代入演算子1
fk_Matrix & | operator*= (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_OrthoMatrix & | operator= (const fk_OrthoMatrix &)
| 単純代入演算子
fk_OrthoMatrix & | operator*= (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_Vector や fk_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] | x | x方向の拡大縮小率
  [in] | y | y方向の拡大縮小率
  [in] | z | z方向の拡大縮小率

## ◆ 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()