2015-03-19 34 views
2

我需要從1D數組中提取4D位置。我可以看到它是如何去爲2D和3D的,但我有一個很難包裝我周圍的第四維頭..一維索引的4D位置?

對於2D:

int* array = new int[width * height]; 
int index = y * width + x; 
int x = index/height 
int y = index - x * height; 

對於3D:

int* array = new int[width * height * depth]; 
int index = z * width * height + y * width + z; 
int x = index/(height * depth); 
int y = index - (x * height * depth)/depth; 
int z = index - (x * height * depth) - (y * depth); 

對於4D?

int* array = new int[width * height * depth * duration]; 
int index = w * width * height * depth + z * width * height + y * width + w; 
int x = index/(height * depth * duration); 
int y = ?? 

回答

7

索引公式由任何給定維度值與所有先前維度的乘積的乘積給出。

Index = xn (D1 * ... * D{n-1}) + x{n-1} (D1 * ... * D{n-2}) + ... + x2 * D1 + x1 

所以對於4D

index = x + y * D1 + z * D1 * D2 + t * D1 * D2 * D3; 
x = Index % D1; 
y = ((Index - x)/D1) % D2; 
z = ((Index - y * D1 - x)/(D1 * D2)) % D3; 
t = ((Index - z * D2 * D1 - y * D1 - x)/(D1 * D2 * D3)) % D4; 
/* Technically the last modulus is not required, 
    since that division SHOULD be bounded by D4 anyways... */ 

形式的通式感

xn = ((Index - Index(x1, ..., x{n-1}))/Product(D1, ..., D{N-1})) % Dn