Matrix
hoge1e3 edited this page Aug 6, 2019
·
6 revisions
2次元配列を扱うクラスです.縦横の要素数の限度はなく,任意の座標に要素(任意の値,オブジェクト)を格納できます.
m=new Matrix;
m.set(3,5,"test");
print(m.get(3,5)); // test
m.set(4,6,{name:"tonyu"});
print(m.get(4,6).name);// tonyu
new Matrix
空のMatrixを作成します.
new Matrix(data)
指定されたデータをもつMatrixを作成します.data
にはオブジェクトを指定します.キーには横座標,縦座標をあらわす数値をカンマで区切った文字列を与えます(例:"12,34"
).
- xmin,xmax,ymin,ymax
- それぞれ,現在データが格納されている領域のx座標またはy座標の最大値または最小値を返します.
- データが1つも格納されていない場合,
undefined
が返ります.
- rows, cols
- データが格納されている領域の高さ,幅を返します.
- 例:(-5,4)と(5,6)にデータを格納した場合
- xmin=-5, xmax=5, ymin=4, ymax=6,
- rows=6-4+1=3, cols=5-(-5)+1=11
- neighborDirs
- neighbors メソッドにおいて,隣接領域のデフォルトの数(4または8)を指定します.
- set(x,y,d)
- (x,y)の位置にデータdを格納します.dを省略すると,その位置のデータを削除します.
- get(x,y)
- (x,y)の位置に格納されているデータを読み出します.格納されていない場合は
undefined
を返します.
- (x,y)の位置に格納されているデータを読み出します.格納されていない場合は
- load(csvfile)
- csvファイルからデータを読み込みます.
- search(value)
- 指定された値がある場所をオブジェクト{x,y}で返します.
- cross(rowValue,colValue)
- rowValueで指定された値がある行,colValueで指定された値がある列が交わる箇所の値を返します.
- crop(params)
- 指定した領域のデータだけを切り出した新しいMatrixオブジェクトを返します.
- params には,left,top,right,bottom,width,height,keepXY を属性にもつオブジェクトを渡します(一部省略可能)
-
left, top
: 切り出す位置の左上の座標(必須) -
right, bottom
: 切り出す位置の右下の座標(width,height
を指定した場合は省略) -
width, height
: 切り出す領域の幅と高さ(right,bottom
を指定した場合は省略) -
keepXY
: trueを指定した場合,切り出したあとの新しいMatrixオブジェクトをにおいて,各データのある座標をこのMatrixオブジェクトと同じ座標にする.falseを指定したり省略したりした場合,切り出した範囲の左上(left,top)にあるデータは,新しいMatrixオブジェクトにおいては(0,0)の位置に配置され,他のデータの座標もそれに準じてずれる.
-
- neighbors(x,y,options)
- このMatrixオブジェクトの指定された位置(x,y)を中心とし,それに隣接する要素の座標とデータを配列で返します.
-
options
には次を指定できます-
dirs
隣接する領域の数.4または8を指定.4を指定した場合,上下左右のみを隣接するとみなし,8の場合は斜めも含めて隣接するとみなす.省略した場合はneighborDirsを用いる. -
includeEmpty
trueを指定した場合,データのない要素も含めて結果に返す(value
はundefined
になる)
-
- 戻り値は,隣接する要素をあわらす次のオブジェクトの配列になります
{x:x座標, y:y座標, ox:中心からの変位のx座標, oy:中心からの変位のy座標, value:データ }
- keysIterator()
- データのある点のみを走査するイテレータです.次のfor...in の節参照.
- rectIterator()
- データのある領域を囲う四角形の領域を走査するイテレータです.次のfor...in の節参照.
- "change"
- 値が書き込まれたときに呼び出されます.
- ※すでに書き込まれているものと同じ値が書き込まれた場合は呼び出されません
- 呼び出されるときに
{x: 横位置, y: 縦位置, value:書き込まれた値 }
を オブジェクトにして渡します.
- 値が書き込まれたときに呼び出されます.
次のようにすると,データが格納されている領域を囲う四角形の領域を繰り返します.
// mはMatrixクラスのオブジェクト
for (x,y,d in m) {
// xmin<=x<=xmax, ymin<=y<=ymax をみたすすべての座標について繰り返す
// x,y に座標, dにデータ(格納されていない場所ではundefined)
}
データのない点を繰り返したくない場合は,次のようにkeysIteratorを使います.
// mはMatrixクラスのオブジェクト
for (x,y,d in m.keysIterator()) {
// x,y に座標, dにデータ
}