2D画像を1D配列として表すネイティブクラスを使用しています。たとえば、1つのピクセルを変更する場合は、x,y
座標からインデックスを取得する方法が必要です。
したがって、次のような1D配列array1d
があるとします。
array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ]
プログラムのコンテキストでは、array1d
は2Dグリッドを表します。
a b c d e
f g h i j
k l m n o
p q r s t
u v w x y
また、array1d
に対して次のような操作を実行したいとします。
x,y
座標の値を取得します(この例では、1,2
はl
を返します)x,y,width,height
を使用してサブグリッドを取得します(1,2,2,2
は[l, m, q, r]
を提供します)x,y
座標に値を設定します(など)これらをどのように行うのですか?
2D/1D-マッピングは非常に簡単です。 xとy、および2D配列サイズwidth
(x方向の場合)およびheight
(y方向の場合)を指定すると、1D空間で対応するインデックスi
を計算できます(ゼロベース)
i = x + width*y;
そして逆の操作は
x = i % width; // % is the "modulo operator", the remainder of i / width;
y = i / width; // where "/" is an integer division
これを3次元以上に簡単に拡張できます。たとえば、寸法が「幅」、「高さ」、「深さ」の3Dマトリックスの場合:
i = x + width*y + width*height*z;
そして逆:
x = i % width;
y = (i / width)%height;
z = i / (width*height);