I am working with a native class that represents a 2D image as a 1D array. If you want to change one pixel, for example, you need to now how to derive the index from the x,y coordinates.So, let's say we have a 1D array array1d like this: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 ]In the context of our program, array1d represents a 2D grid:a b c d ef g h i jk l m n op q r s tu v w x yAnd we want to perform operations on array1d such as:Get the value at x,y coordinates (in this example, 1,2 would give l)Get any sub-grid using x,y,width,height (1,2,2,2 would give [l, m, q, r])Set the value at any x,y coordinate (etc.)How do we do these?
Treating a 1D data structure as 2D grid
data structures;math;graphics
2D / 1D - mapping is pretty simple. Given x and y, and 2D array sizes width and height, you can calculate the according index i in 1D space (zero-based) byi = x + width*y;and the reverse operation is x = i % width;    // % is the modulo operator, the remainder of i / width;y = i / width;    // where / is an integer divisionYou can extend this easily to 3 or more dimensions. For example, for a 3D matrix with dimensions width, height and depth:i = x + width*y + width*height*z;and reverse:x = i % width;y = (i / width)%height;z = i / (width*height);