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

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

#include <CLI/FK_CLI/include/Matrix_CLI.h>

公開メンバ関数

 fk_Matrix ()
 コンストラクタ
 
 fk_Matrix (fk_Matrix^)
 コピーコンストラクタ
 
 ~fk_Matrix ()
 デストラクタ
 
 !fk_Matrix ()
 ファイナライザ
 
bool Equals (fk_Matrix^ M)
 同値比較メソッド1
 
virtual bool Equals (Object^ O) override
 同値比較メソッド2
 
String ^ ToString () override
 文字列出力メソッド
 
成分参照・取得系メソッド
void Init ()
 単位行列化メソッド
 
void Set (int row, int col, double value)
 成分設定メソッド
 
void SetRow (int row, fk_Vector^ V)
 行ベクトル成分設定メソッド1
 
void SetRow (int row, fk_HVector^ V)
 行ベクトル成分設定メソッド2
 
void SetCol (int col, fk_Vector^ V)
 列ベクトル成分設定メソッド1
 
void SetCol (int col, fk_HVector^ V)
 列ベクトル成分設定メソッド1
 
fk_HVectorGetRow (int row)
 行ベクトル成分取得メソッド
 
fk_HVectorGetCol (int col)
 列ベクトル成分取得メソッド
 
逆行列・転置系メソッド
bool Inverse ()
 逆行列化メソッド
 
fk_MatrixGetInverse ()
 逆行列取得演算子
 
void Negate ()
 転置化メソッド
 
bool IsRegular ()
 正則判定メソッド
 
bool IsSingular ()
 特異判定メソッド
 
変換行列生成系メソッド
void MakeRot (double rad, fk_Axis axis)
 座標軸回転行列生成メソッド
 
void MakeTrans (double x, double y, double z)
 平行移動行列生成メソッド1
 
void MakeTrans (fk_Vector^ V)
 平行移動行列生成メソッド2
 
void MakeEuler (double h, double p, double b)
 オイラー角回転行列生成メソッド1
 
void MakeEuler (fk_Angle^ angle)
 オイラー角回転行列生成メソッド2
 
void MakeScale (double x, double y, double z)
 拡大縮小行列生成メソッド1
 
void MakeScale (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)
 平行投影変換行列生成関数
 

静的公開メンバ関数

static fk_HVectoroperator* (fk_Matrix^ M, fk_HVector^ V1)
 ベクトル変換二項演算子
 
static fk_Matrixoperator* (fk_Matrix^ M1, fk_Matrix^ M2)
 行列積二項演算子
 
static fk_Matrixoperator* (double d, fk_Matrix^ M1)
 行列実数倍二項演算子1
 
static fk_Matrixoperator* (fk_Matrix^ M1, double d)
 行列実数倍二項演算子2
 
static fk_Matrixoperator- (fk_Matrix^ M1, fk_Matrix^ M2)
 行列差二項演算子
 
static fk_Matrixoperator+ (fk_Matrix^ M1, fk_Matrix^ M2)
 行列和二項演算子
 
static void operator+= (fk_Matrix^ M1, fk_Matrix^ M2)
 行列和代入演算子
 
static void operator-= (fk_Matrix^ M1, fk_Matrix^ M2)
 行列差代入演算子1
 
static void operator*= (fk_Matrix^ M1, fk_Matrix^ M2)
 行列積代入演算子1
 

プロパティ

double default [int, int] [get, set]
 成分プロパティ
 

詳解

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

このクラスは、4元正方行列に関する様々な機能を提供します。 行列同士の演算の他、ベクトルとの積演算(一次変換)も fk_Vectorfk_HVector クラスを用いて行えます。

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

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

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

参照
fk_GenMatrix, fk_Vector, fk_HVector

構築子と解体子

◆ fk_Matrix() [1/2]

FK_CLI::fk_Matrix::fk_Matrix ( )

コンストラクタ

単位行列を生成します。

◆ fk_Matrix() [2/2]

FK_CLI::fk_Matrix::fk_Matrix ( fk_Matrix )

コピーコンストラクタ

◆ ~fk_Matrix()

FK_CLI::fk_Matrix::~fk_Matrix ( )

デストラクタ

◆ !fk_Matrix()

FK_CLI::fk_Matrix::!fk_Matrix ( )

ファイナライザ

関数詳解

◆ Equals() [1/2]

bool FK_CLI::fk_Matrix::Equals ( fk_Matrix M)

同値比較メソッド1

2つの行列が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。

引数
[in]M同値かどうかを判定する行列
戻り値
同値であれば true を、そうでなければ false を返します。

◆ Equals() [2/2]

virtual bool FK_CLI::fk_Matrix::Equals ( Object^  O)
overridevirtual

同値比較メソッド2

2つの行列が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。

引数
[in]O同値かどうかを判定する行列
戻り値
同値であれば true を、そうでなければ false を返します。

◆ ToString()

String ^ FK_CLI::fk_Matrix::ToString ( )
override

文字列出力メソッド

現在のベクトル成分値を文字列として出力します。

戻り値
成分値の文字列

◆ operator*() [1/4]

static fk_HVector ^ FK_CLI::fk_Matrix::operator* ( fk_Matrix M,
fk_HVector V1 
)
static

ベクトル変換二項演算子

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

V2 = M * V1;

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

◆ operator*() [2/4]

static fk_Matrix ^ FK_CLI::fk_Matrix::operator* ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列積二項演算子

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

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

◆ operator*() [3/4]

static fk_Matrix ^ FK_CLI::fk_Matrix::operator* ( double  d,
fk_Matrix M1 
)
static

行列実数倍二項演算子1

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

M2 = d * M1;

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

◆ operator*() [4/4]

static fk_Matrix ^ FK_CLI::fk_Matrix::operator* ( fk_Matrix M1,
double  d 
)
static

行列実数倍二項演算子2

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

M2 = M1 * d;

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

◆ operator-()

static fk_Matrix ^ FK_CLI::fk_Matrix::operator- ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列差二項演算子

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

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

◆ operator+()

static fk_Matrix ^ FK_CLI::fk_Matrix::operator+ ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列和二項演算子

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

M3 = M1 + M2;
覚え書き
行列和は交換法則が成り立ちます。

◆ operator+=()

static void FK_CLI::fk_Matrix::operator+= ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列和代入演算子

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

M1 += M2;

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

M1 = M1 + M2;

◆ operator-=()

static void FK_CLI::fk_Matrix::operator-= ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列差代入演算子1

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

M1 -= M2;

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

M1 = M1 - M2;

◆ operator*=()

static void FK_CLI::fk_Matrix::operator*= ( fk_Matrix M1,
fk_Matrix M2 
)
static

行列積代入演算子1

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

M1 *= M2;

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

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

◆ Init()

void FK_CLI::fk_Matrix::Init ( )

単位行列化メソッド

行列を単位行列に初期化します。

◆ Set()

void FK_CLI::fk_Matrix::Set ( int  row,
int  col,
double  value 
)

成分設定メソッド

行番号 row、列番号 col に対応する成分を value に設定します。 row, col はそれぞれ最初が 0、最後が 3 になります。

次のコード

M.Set(1, 2, 0.5);

は、以下のコードと同義になります。

M.m[1, 2] = 0.5;
引数
[in]row行番号
[in]col列番号
[in]value設定する成分の値

◆ SetRow() [1/2]

void FK_CLI::fk_Matrix::SetRow ( int  row,
fk_Vector V 
)

行ベクトル成分設定メソッド1

行列中の、行番号が row である行ベクトルを vec に設定します。 row は最初が 0、最後が 3 となります。このメソッドの場合、 行ベクトルの最後の成分については値は変更しません。

次のコード

M.SetRow(row, vec);

は、以下のコードと同義になります。

M.m[row, 0] = vec.x;
M.m[row, 1] = vec.y;
M.m[row, 2] = vec.z;
引数
[in]row行番号
[in]V設定ベクトル

◆ SetRow() [2/2]

void FK_CLI::fk_Matrix::SetRow ( int  row,
fk_HVector V 
)

行ベクトル成分設定メソッド2

行列中の、行番号が row である行ベクトルを V に設定します。 row は最初が 0、最後が 3 となります。

次のコード

M.setRow(row, vec);

は、以下のコードと同義になります。

M[row, 0] = vec.x;
M[row, 1] = vec.y;
M[row, 2] = vec.z;
M[row, 3] = vec.w;
引数
[in]row行番号
[in]V設定ベクトル

◆ SetCol() [1/2]

void FK_CLI::fk_Matrix::SetCol ( int  col,
fk_Vector V 
)

列ベクトル成分設定メソッド1

行列中の、列番号が col である列ベクトルを vec に設定します。 col は最初が 0、最後が 3 となります。このメソッドの場合、 列ベクトルの最後の成分については値は変更しません。

次のコード

M.SetCol(col, vec);

は、以下のコードと同義になります。

M[0, col] = vec.x;
M[1, col] = vec.y;
M[2, col] = vec.z;
引数
[in]col列番号
[in]V設定ベクトル

◆ SetCol() [2/2]

void FK_CLI::fk_Matrix::SetCol ( int  col,
fk_HVector V 
)

列ベクトル成分設定メソッド1

行列中の、列番号が col である列ベクトルを vec に設定します。 col は最初が 0、最後が 3 となります。

次のコード

M.SetCol(col, vec);

は、以下のコードと同義になります。

M[0, col] = vec.x;
M[1, col] = vec.y;
M[2, col] = vec.z;
M[3, col] = vec.w;
引数
[in]col列番号
[in]V設定ベクトル

◆ GetRow()

fk_HVector ^ FK_CLI::fk_Matrix::GetRow ( int  row)

行ベクトル成分取得メソッド

行列中の、行番号が row である行ベクトルを返します。 row は最初が 0、最後が 3 となります。

引数
[in]row行番号
戻り値
行ベクトル

◆ GetCol()

fk_HVector ^ FK_CLI::fk_Matrix::GetCol ( int  col)

列ベクトル成分取得メソッド

行列中の、列番号が col である列ベクトルを返します。 col は最初が 0、最後が 3 となります。

引数
[in]col列番号
戻り値
列ベクトル

◆ Inverse()

bool FK_CLI::fk_Matrix::Inverse ( )

逆行列化メソッド

現在設定されている行列に対し、自身を逆行列化します。 行列が特異行列(非正則行列)である場合は失敗となり、 自身の変化を行いません。

戻り値
成功すれば true を、失敗すれば false を返します。
覚え書き
直交行列の場合、このメソッドは Negate() でもまったく同様に動作します。
参照
GetInverse(), Negate(), IsRegular(), IsSingular()

◆ GetInverse()

fk_Matrix ^ FK_CLI::fk_Matrix::GetInverse ( )

逆行列取得演算子

現在設定されている行列の逆行列を求めます。 自身の値は変化しません。

戻り値
逆行列を返します。もし自身が特異行列であった場合は、自身と同値を返します。
参照
Inverse(), IsRegular(), IsSingular()

◆ Negate()

void FK_CLI::fk_Matrix::Negate ( )

転置化メソッド

現在設定されている行列に対し、自身を転置化します。

参照
Inverse()

◆ IsRegular()

bool FK_CLI::fk_Matrix::IsRegular ( )

正則判定メソッド

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

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

◆ IsSingular()

bool FK_CLI::fk_Matrix::IsSingular ( )

特異判定メソッド

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

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

◆ MakeRot()

void FK_CLI::fk_Matrix::MakeRot ( double  rad,
fk_Axis  axis 
)

座標軸回転行列生成メソッド

座標軸回転変換を表す行列を生成します。

引数
[in]rad回転角。単位は弧度法(ラジアン)です。
[in]axis座標軸。 fk_Axis.X, fk_Axis.Y, fk_Axis.Z のいずれかになります。

◆ MakeTrans() [1/2]

void FK_CLI::fk_Matrix::MakeTrans ( double  x,
double  y,
double  z 
)

平行移動行列生成メソッド1

平行移動変換を表す行列を生成します。

引数
[in]xx方向の移動量
[in]yy方向の移動量
[in]zz方向の移動量

◆ MakeTrans() [2/2]

void FK_CLI::fk_Matrix::MakeTrans ( fk_Vector V)

平行移動行列生成メソッド2

平行移動変換を表す行列を生成します。

引数
[in]V移動ベクトル

◆ MakeEuler() [1/2]

void FK_CLI::fk_Matrix::MakeEuler ( double  h,
double  p,
double  b 
)

オイラー角回転行列生成メソッド1

オイラー角による合成回転変換を表す行列を生成します。 オイラー角については、 fk_Angle を参照して下さい。

引数
[in]hヘディング角
[in]pピッチ角
[in]bバンク角

◆ MakeEuler() [2/2]

void FK_CLI::fk_Matrix::MakeEuler ( fk_Angle angle)

オイラー角回転行列生成メソッド2

オイラー角による合成回転変換を表す行列を生成します。 オイラー角については、 fk_Angle を参照して下さい。

引数
[in]angleオイラー角

◆ MakeScale() [1/2]

void FK_CLI::fk_Matrix::MakeScale ( double  x,
double  y,
double  z 
)

拡大縮小行列生成メソッド1

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

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

◆ MakeScale() [2/2]

void FK_CLI::fk_Matrix::MakeScale ( fk_Vector V)

拡大縮小行列生成メソッド2

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

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

◆ MakePerspective()

void FK_CLI::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_CLI::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_CLI::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()

プロパティ詳解

◆ default

double FK_CLI::fk_Matrix::default[int, int]
getset

成分プロパティ

各成分の設定や参照を行います。 1番目の引数が行番号、2番目の引数が列番号です。

M[1,2] = 5.0;