2Dゲーム用の3行3列のマトリックスの関数を作ろう
・ | 単位行列を作成する |
・ | 平行行列を作成する |
・ | 回転行列を作成する |
・ | 拡縮行列を作成する |
・ | 座標の射影変換 |
・ | ベクトルの射影変換 |
・ | マトリックスの射影変換 |
・ | 正規直交行列の逆行列を作成する |
・ | 逆行列を作成する |
・ | ソースをダウンロード |
単位行列を作成する
■行列の型
Matrixクラスと互換性を持たせるために同じオブジェクト形式で行列計算しています。
ここで扱うマトリックスの形式
var matrix = {
a : 0 , b : 0,
c : 0 , d : 0,
tx : 0 , ty : 0,
};
■単位行列生成
行列用のオブジェクトを生成する関数です。これで単位行列を作ります。
単位行列の作成
function Mtx33Create(){
return {
a : 1, b : 0,
c : 0, d : 1,
tx: 0, ty: 0
};
}
使用例です。
例)行列を作成する
var matrix = Mtx33Create();
平行行列を作成する
■平行行列生成
平行行列を作成します。
第01引数にx座標
第02引数にy座標を指定します。
戻り値に行列がオブジェクト型で返ります。
第01引数にx座標
第02引数にy座標を指定します。
戻り値に行列がオブジェクト型で返ります。
平行行列を作成
function Mtx33Translate(x,y){
return {
a : 1, b : 0,
c : 0, d : 1,
tx: x, ty: y
};
}
使用例です。
例)x座標に 20 y座標に -7 移動する行列
var matrix = Mtx33Translate(20,-7);
■平行行列 × 行列
平行行列を生成してから、別の行列の前に置いて乗算する関数です。
第01引数にx座標
第02引数にy座標
第03引数に行列を指定します。
戻り値に行列がオブジェクト型で返ります。
第01引数にx座標
第02引数にy座標
第03引数に行列を指定します。
戻り値に行列がオブジェクト型で返ります。
平行行列を別の行列の前に置いて乗算
function Mtx33TranslatePref(x,y,m){
return {
a : m.a,
b : m.b,
c : m.c,
d : m.d,
tx: x * m.a + y * m.c + m.tx,
ty: x * m.b + y * m.d + m.ty
};
}
使用例です。
例)[(5,5)移動する行列] × [(20,-7)移動する行列]
var m1 = Mtx33Translate(20,-7);
var m2 = Mtx33TranslatePref(5,5,m1);
■行列 × 平行行列
平行行列を生成してから、別の行列の後に置いて乗算する関数です。
第01引数にx座標
第02引数にy座標
第03引数に行列
戻り値に行列が返ります。
第01引数にx座標
第02引数にy座標
第03引数に行列
戻り値に行列が返ります。
平行行列を別の行列の後に置いて乗算
function Mtx33TranslatePost(x,y,m){
return {
a : m.a,
b : m.b,
c : m.c,
d : m.d,
tx: m.tx + x,
ty: m.ty + y
};
}
使用例です。
例)[(20,-7)移動する行列] × [(5,5)移動する行列]
var m1 = Mtx33Translate(20,-7);
var m2 = Mtx33TranslatePost(5,5,m1);
回転行列を作成する
回転行列生成 |
拡縮行列を作成する
拡縮行列生成 |
座標の射影変換
座標の射影変換 |
ベクトルの射影変換
ベクトルの射影変換 |
マトリックスの射影変換
行列×行列の計算 |
正規直交行列の逆行列を作成する
正規直交行列の逆行列を作成する |
逆行列を作成する
逆行列を作成する |