矩阵相关模板代码汇总
Opened this issue · 0 comments
Mr-haili commented
容我三思
// 矩阵相关模板代码
interface IVector {
x: number,
y: number
}
const Vect = (x: number, y: number): IVector => ({ x, y });
const addV = (a: IVector, b: IVector) => Vect(a.x + b.x, b.x + b.y);
type MatrixValFn<T> = (v: IVector, val?: T) => T;
type MatrixFn<T = number> = MatrixValFn<T> & {
readonly maxX: number,
readonly maxY: number,
readonly matrix: number[][]
};
function Matrix<T = number>(
maxX: number,
maxY: number,
initValFn: MatrixValFn<T>
): MatrixFn<T> {
const matrix = Array(maxX).fill(null).map(
(row, x) => Array(maxY).fill(null).map((v, y) => initValFn(Vect(x, y)))
);
const A = (v: IVector, val?: T) => {
if(val !== undefined) {
return matrix[v.x][v.y] = val;
}
return matrix[v.x][v.y];
};
A.maxX = maxX;
A.maxY = maxY;
A.matrix = matrix;
return A;
}