FineKernelToolKit 4.2.13
|
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_HVector ^ | GetRow (int row) |
行ベクトル成分取得メソッド | |
fk_HVector ^ | GetCol (int col) |
列ベクトル成分取得メソッド | |
逆行列・転置系メソッド | |
bool | Inverse () |
逆行列化メソッド | |
fk_Matrix ^ | GetInverse () |
逆行列取得演算子 | |
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_HVector ^ | operator* (fk_Matrix^ M, fk_HVector^ V1) |
ベクトル変換二項演算子 | |
static fk_Matrix ^ | operator* (fk_Matrix^ M1, fk_Matrix^ M2) |
行列積二項演算子 | |
static fk_Matrix ^ | operator* (double d, fk_Matrix^ M1) |
行列実数倍二項演算子1 | |
static fk_Matrix ^ | operator* (fk_Matrix^ M1, double d) |
行列実数倍二項演算子2 | |
static fk_Matrix ^ | operator- (fk_Matrix^ M1, fk_Matrix^ M2) |
行列差二項演算子 | |
static fk_Matrix ^ | operator+ (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_Vector や fk_HVector クラスを用いて行えます。
FKでは行列は MV 行列系を採用しています。 従って、行列とベクトルの積演算においては行列が左側、ベクトルは右側となり、 ベクトルは列ベクトルとして扱われます。 また、行列積による合成変換を生成した場合、 変換は右側の行列から行われることになります。
行列とベクトルの積に fk_Vector 型を用いた場合、 同次座標が 1 である fk_HVector 型として扱われます。
任意元の正方行列を扱う場合は fk_GenMatrix を利用して下さい。
FK_CLI::fk_Matrix::fk_Matrix | ( | ) |
コンストラクタ
単位行列を生成します。
FK_CLI::fk_Matrix::fk_Matrix | ( | fk_Matrix^ | ) |
コピーコンストラクタ
FK_CLI::fk_Matrix::~fk_Matrix | ( | ) |
デストラクタ
FK_CLI::fk_Matrix::!fk_Matrix | ( | ) |
ファイナライザ
bool FK_CLI::fk_Matrix::Equals | ( | fk_Matrix^ | M | ) |
同値比較メソッド1
2つの行列が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | M | 同値かどうかを判定する行列 |
|
overridevirtual |
同値比較メソッド2
2つの行列が同値かどうかを判定します。 単純に == 演算子を用いた場合はインスタンスが同一であるかどうかの判定となるため、 異なるインスタンスで同値かどうかを判定する場合はこのメソッドを利用して下さい。
[in] | O | 同値かどうかを判定する行列 |
|
override |
文字列出力メソッド
現在のベクトル成分値を文字列として出力します。
|
static |
ベクトル変換二項演算子
4次元ベクトル V1 の、行列 M による変換ベクトル V2 を求めるには、 以下のように記述します。 V1, V2 は共に fk_HVector 型の変数で、M は fk_Matrix 型の変数です。
V2 = M * V1;
FK では行列体系として MV 系を採用しており、 行列のベクトル変換の際には行列が左側、ベクトルが右側である必要があります。
行列積二項演算子
行列 M1, M2 の行列積 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型の変数です。
M3 = M1 * M2;
行列実数倍二項演算子1
行列 M1 のスカラー倍行列をエルには、以下のように記述します。 M1, M2 はいずれも fk_Matrix 型の変数で、d は double 型の変数です。
M2 = d * M1;
なお、行列と実数の順番は逆でも構いません。
行列実数倍二項演算子2
行列 M1 のスカラー倍行列をエルには、以下のように記述します。 M1, M2 はいずれも fk_Matrix 型の変数で、d は double 型の変数です。
M2 = M1 * d;
なお、行列と実数の順番は逆でも構いません。
行列差二項演算子
行列 M1, M2 の行列差 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型です。
M3 = M1 - M2;
行列和二項演算子
行列 M1, M2 の行列和 M3 を求めるには、 以下のように記述します。 M1, M2, M3 はいずれも fk_Matrix 型です。
M3 = M1 + M2;
行列和代入演算子
以下のコードは、M1 と M2 の行列和を 前の M1 の値は破棄して改めて M1 に設定します。
M1 += M2;
これは、以下のコードと同義です。
M1 = M1 + M2;
行列差代入演算子1
以下のコードは、M1 と M2 の行列差を 前の M1 の値は破棄して改めて M1 に設定します。
M1 -= M2;
これは、以下のコードと同義です。
M1 = M1 - M2;
行列積代入演算子1
以下のコードは、M1 と M2 の行列積を 前の M1 の値は破棄して改めて M1 に設定します。
M1 *= M2;
これは、以下のコードと同義です。
M1 = M1 * M2;
void FK_CLI::fk_Matrix::Init | ( | ) |
単位行列化メソッド
行列を単位行列に初期化します。
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 | 設定する成分の値 |
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 | 設定ベクトル |
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 | 設定ベクトル |
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 | 設定ベクトル |
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 | 設定ベクトル |
fk_HVector ^ FK_CLI::fk_Matrix::GetRow | ( | int | row | ) |
行ベクトル成分取得メソッド
行列中の、行番号が row である行ベクトルを返します。 row は最初が 0、最後が 3 となります。
[in] | row | 行番号 |
fk_HVector ^ FK_CLI::fk_Matrix::GetCol | ( | int | col | ) |
列ベクトル成分取得メソッド
行列中の、列番号が col である列ベクトルを返します。 col は最初が 0、最後が 3 となります。
[in] | col | 列番号 |
bool FK_CLI::fk_Matrix::Inverse | ( | ) |
逆行列化メソッド
現在設定されている行列に対し、自身を逆行列化します。 行列が特異行列(非正則行列)である場合は失敗となり、 自身の変化を行いません。
fk_Matrix ^ FK_CLI::fk_Matrix::GetInverse | ( | ) |
逆行列取得演算子
現在設定されている行列の逆行列を求めます。 自身の値は変化しません。
void FK_CLI::fk_Matrix::Negate | ( | ) |
bool FK_CLI::fk_Matrix::IsRegular | ( | ) |
正則判定メソッド
行列が正則であるかどうかを判定します。 正則行列とは、逆行列が存在する行列のことです。
bool FK_CLI::fk_Matrix::IsSingular | ( | ) |
特異判定メソッド
行列が特異であるかどうかを判定します。 特異行列とは、逆行列が存在しない行列のことです。 これは「非正則行列」と同義になります。
void FK_CLI::fk_Matrix::MakeRot | ( | double | rad, |
fk_Axis | axis | ||
) |
void FK_CLI::fk_Matrix::MakeTrans | ( | double | x, |
double | y, | ||
double | z | ||
) |
平行移動行列生成メソッド1
平行移動変換を表す行列を生成します。
[in] | x | x方向の移動量 |
[in] | y | y方向の移動量 |
[in] | z | z方向の移動量 |
void FK_CLI::fk_Matrix::MakeTrans | ( | fk_Vector^ | V | ) |
平行移動行列生成メソッド2
平行移動変換を表す行列を生成します。
[in] | V | 移動ベクトル |
void FK_CLI::fk_Matrix::MakeEuler | ( | double | h, |
double | p, | ||
double | b | ||
) |
オイラー角回転行列生成メソッド1
オイラー角による合成回転変換を表す行列を生成します。 オイラー角については、 fk_Angle を参照して下さい。
[in] | h | ヘディング角 |
[in] | p | ピッチ角 |
[in] | b | バンク角 |
void FK_CLI::fk_Matrix::MakeEuler | ( | fk_Angle^ | angle | ) |
void FK_CLI::fk_Matrix::MakeScale | ( | double | x, |
double | y, | ||
double | z | ||
) |
拡大縮小行列生成メソッド1
各座標軸方向への拡大縮小率を個別に設定した行列を生成します。
[in] | x | x方向の拡大縮小率 |
[in] | y | y方向の拡大縮小率 |
[in] | z | z方向の拡大縮小率 |
void FK_CLI::fk_Matrix::MakeScale | ( | fk_Vector^ | V | ) |
拡大縮小行列生成メソッド2
各座標軸方向への拡大縮小率を個別に設定した行列を生成します。 引数のベクトルの各成分が、軸方向の拡大縮小率と対応します。
[in] | V | 拡大縮小率ベクトル |
void FK_CLI::fk_Matrix::MakePerspective | ( | double | fovy, |
double | near, | ||
double | far, | ||
double | aspect | ||
) |
簡易透視投影変換行列生成関数
透視投影変換行列を生成します。 この関数では、視野錐台が上下左右で対称であることを前提としています。 非対称な視野錐台の場合は makeFrustum() を利用してください。
[in] | fovy | 水平視野角 |
[in] | near | 前方クリッピング距離 |
[in] | far | 後方クリッピング距離 |
[in] | aspect | アスペクト比 |
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 | 後方クリッピング距離 |
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 | 後方クリッピング距離 |
|
getset |
成分プロパティ
各成分の設定や参照を行います。 1番目の引数が行番号、2番目の引数が列番号です。
M[1,2] = 5.0;