前言
上一篇文章,我們定義了矩陣,這篇文章我們來給矩陣添加一些常用方法。
toString方法
toString方法通常用作將對象轉成字串描述,所以我們將這一方法定義為輸出矩陣元素。
Mat.prototype.toString = function(){ var tempData = this.data, text = "Mat("+ this.type +") = {\n", num = this.col * this.channel; for(var i = 0; i < this.row; i++){ text += "[" for(var j = 0; j < num; j++){ text += (tempData[i * num + j] + ","); } text += "]\n"; } text += "}"; return text;};
這樣,我們就可以通過:
console.log(mat);
來輸出矩陣了。
clone方法
實際上,我們可 以通過建構函式進行複製操作,不過依然提供一個方法來方便記憶、使用。
Mat.prototype.clone = function(){ return new Mat(this.row, this.col, this.data);};
擷取指定元素
我們有兩種方法擷取矩陣元素。
數組方法
由於實際上Mat是以數組形式保 存資料的,而資料看起來是這樣的:
R00 G00 B00 A00 R01 G01 B01 A01 …… R0n G0n B0n A0n
R10 G10 B10 A10 R11 G11 B11 A11 …… R1n G1n B1n A1n
……
Rm0 Gm0 Bm0 Am0 Rm1 Gm1 Bm1 Am1 …… Rmn Gmn Bmn Amn
其中大寫R、G、B、A分別代表各通道的數值,而下標第一個表示行號,第二個表示 列號。即第k行,第j列的G通道數值就是Gkj。
我們很容易得到對於一個Mat類型的mat來說,第k行,第j列像素的每 個元素分別是:
Rkj = mat.data[(k * mat.col + j) * 4 + 0]
Gkj = mat.data[(k * mat.col + j) * 4 + 1]
Bkj = mat.data[(k * mat.col + j) * 4 + 2]
Akj = mat.data[(k * mat.col + j) * 4 + 3]
Buffer部分引用方法