Je travaille avec une classe native qui représente une image 2D comme un tableau 1D. Si vous souhaitez modifier un pixel, par exemple, vous devez maintenant savoir comment dériver l'index à partir de x,y
coordonnées.
Supposons donc que nous ayons un tableau 1D array1d
comme ça:
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 ]
Dans le cadre de notre programme, array1d
représente une grille 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
Et nous voulons effectuer des opérations sur array1d
tel que:
x,y
coordonnées (dans cet exemple, 1,2
donnerait l
)x,y,width,height
(1,2,2,2
donnerait [l, m, q, r]
)x,y
coordonnée (etc.)Comment faisons-nous cela?
2D/1D - la cartographie est assez simple. Étant donné x et y, et les tailles de tableau 2D width
(pour la direction x) et height
(pour la direction y), vous pouvez calculer l'indice correspondant i
dans l'espace 1D (base zéro) par
i = x + width*y;
et l'opération inverse est
x = i % width; // % is the "modulo operator", the remainder of i / width;
y = i / width; // where "/" is an integer division
Vous pouvez facilement l'étendre à 3 dimensions ou plus. Par exemple, pour une matrice 3D avec les dimensions "largeur", "hauteur" et "profondeur":
i = x + width*y + width*height*z;
et inverser:
x = i % width;
y = (i / width)%height;
z = i / (width*height);