##### Ninja Library - 構造体/その他のデータ型

# NJS_MATRIX

4*4 行列（マトリクス）

### 定義

>     typedef Float   NJS_MATRIX[16];

### 解説

> 4*4 行列（３Ｄの座標変換用行列）を定義する型です。

> 構造体型ではなく、配列型であることに注意してください。

> 標準的な数学の記法では、行列M の i 行 j 列成分は、Mij と記述します。よって、次のような表記をします。

> ｜M00 M01 M02 M03｜
> M ＝｜M10 M11 M12 M13｜ ・・・・式１
> ｜M20 M21 M22 M23｜
> ｜M30 M31 M32 M33｜

> ３Ｄ空間上の点の集合に回転と平行移動を施すことは、座標 を表す列行列（広義ではベクトルということもある）に 4*4行列 を乗算することに対応できます。4*4 行列はこのように回転と 平行移動を行うもの（＝移動行列）、と考えることもできますし、 点の座標の表現を、ある座標系での表現から別の座標系での表現 へと変換するもの（＝座標変換行列）、と考えることもできます。 3D-CGの世界においては、どちらの考え方も必要ですが、後者の 考え方が頻繁に必要となります。

> 行列 M により座標 P を 座標 Q へ変換することは、座標を 表す列行列 Q を、列行列 P の左から M を乗算した結果にするこ とに対応します。つまり Q = MP となります。Q = MP は、次の ようにも記述します。

> ｜Q0｜　｜M00 M01 M02 M03｜｜X0｜
> ｜Q1｜＝｜M10 M11 M12 M13｜｜X1｜　　 ・・・・式2
> ｜Q2｜　｜M20 M21 M22 M23｜｜X2｜
> ｜Q3｜　｜M30 M31 M32 M33｜｜X3｜

> SH4 の FTRV XMTRX,FVn 命令は、次のように１命令でこの行列 演算を行います。

> FVn XMTRX FVn
> ｜FR[n] ｜　｜XF[0] XF[4] XF[8] XF[12] ｜｜FR[n] ｜
> ｜FR[n+1]｜＝｜XF[1] XF[5] XF[9] XF[13] ｜｜FR[n+1]｜・・・・式3
> ｜FR[n+2]｜　｜XF[2] XF[6] XF[10] XF[14] ｜｜FR[n+2]｜
> ｜FR[n+3]｜　｜XF[3] XF[7] XF[11] XF[15] ｜｜FR[n+3]｜

> NJS_MATRIX 型は、この XMTRX レジスタに対応しています。 つまり、NJS_MATRIX 型の変数 mat は、

> mat[k] = XF[k] (k=0,1,2,...,15) ・・・・式4

> 関係があります。式2,3,4 から、

> mat[j*16+i] = Mij

> となります。これは、NJS_MATRIX 型は行列の縦を優先的に 並べていることを意味します。

> カレントマトリックスは、XMTRX レジスタに格納されてい ます。

### 参照

> njAddMatrix() | マトリクスの加算
> njCalcPoint() | 任意の点のマトリクス変換
> njCalcPoints() | 任意の複数の点のマトリクス変換
> njCalcVector() | 任意のベクトルのマトリクス変換
> njCalcVectors() | 複数のベクトルのマトリクス変換
> njDetMatrix() | 行列式の計算
> njGetMatrix() | カレントマトリクスのコピー
> njGetTranslation() | 任意のマトリクスから移動要素の取り出し
> njInitMatrix() | マトリクススタックの初期化
> njInvertMatrix() | インバートマトリクス(逆行列)の計算
> njMirror() | 任意の境面に対する鏡像の計算
> njMultiMatrix() | マトリクスの右からの乗算
> njPostMultiMatrix() | マトリクスの左からの乗算
> njProject() | 任意の投影面への平行投影
> njProject2() | 任意の投影面への透視投影
> njProjectScreen() | 任意の点のスクリーン投影
> njPushMatrix() | マトリクススタックのプッシュ
> njRotate() | マトリクスの任意軸回りの回転
> njRotateX() | マトリクスのX軸回りの回転
> njRotateXYZ() | マトリクスのXYZ各軸回りの回転
> njRotateY() | マトリクスのY軸回りの回転
> njRotateZ() | マトリクスのZ軸回りの回転
> njRotateZXY() | マトリクスのZXY各軸回りの回転
> njScale() | マトリクスの拡縮
> njScaleV() | マトリクスの拡縮
> njSetMatrix() | 任意のマトリクスのコピー
> njSubMatrix() | マトリクスの減算
> njTranslate() | マトリクスの平行移動
> njTranslateV() | マトリクスの平行移動
> njTransposeMatrix() | 転置行列の計算
> njUnitMatrix() | 任意のマトリクスを単位行列にする
> njUnitRotPortion() | 任意のマトリクスの回転要素を初期化
> njUnitTransPortion() | 任意のマトリクスの移動要素をクリア

NJS_MATRIX

COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000