- 転置
- 逆行列
- 3次元座標変換
以上の最低限を実装
// Zero matrix
new Matrix(3, 2) // Matrix { height: 3, width: 2, data: [ 0, 0, 0, 0, 0, 0 ] }
// Eye matrix
// note: Matrix.map returns new Matrix instance
new Matrix(3, 3).map((_, i, j) => (i === j ? 1 : 0)) // Matrix { height: 3, width: 3, data: [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ] }
let m = new Matrix(3, 2).init([
1, 2,
3, 4,
5, 6]
) // Matrix { height: 3, width: 2, data: [ 1, 2, 3, 4, 5, 6 ] }
// get value
m.at(0, 1) // 2
m.at(-1, -1) // 6
// update value
m.set(0, 1, 10) // Matrix { height: 3, width: 2, data: [ 1, 10, 3, 4, 5, 6 ] }
m.at(0, 1) // 10
m.dropRow(1) // Matrix { height: 2, width: 2, data: [ 1, 10, 5, 6 ] }
m.dropCol(0) // Matrix { height: 3, width: 1, data: [ 10, 4, 6 ] }
// Transpose
m.transpose() // Matrix { height: 2, width: 3, data: [ 1, 3, 5, 10, 4, 6 ] }
// Dot matrix
let m1 = new Matrix(3, 2).init([
2, 3,
1, 4,
2, 1
]);
let m2 = new Matrix(2, 3).init([3, 1, 2, 2, 4, 2]);
let want1 = new Matrix(3, 3).init([12, 14, 10, 11, 17, 10, 8, 6, 6]);
let want2 = new Matrix(2, 2).init([11, 15, 12, 24]);
m1.dot(m2) // Matrix { height: 3, width: 3, data: [ 12, 14, 10, 11, 17, 10, 8, 6, 6 ] }
m1.dot(m2).__eq(want1) // true
m2.dot(m1).__eq(want2) // true
// Square matrix
let mat3x3 = new SquareMatrix(3).init([
1, 0, 2,
-1, 5, 0,
0, 3, -9
])
let want3 = new SquareMatrix(3).init([
0.8823529411764706, -0.11764705882352941, 0.19607843137254902,
0.17647058823529413, 0.17647058823529413, 0.0392156862745098,
0.058823529411764705, 0.058823529411764705, -0.09803921568627451,
])
mat3x3.inv().__eq(want3) // true