Pergunta

Eu sei como simular uma matriz 2D em uma matriz linear usando [x + y * width] como um índice linear.

Eu posso estender isso para matrizes 3D:. [x + y * width + z * width * height]

Existe uma fórmula geral para a matriz N-dimensional?

Eu estou procurando uma resposta língua agnóstico.

Foi útil?

Solução

Claro. Apenas estender seu exemplo dá x + y*width + z*width*height + w*width*height*depth + ...

Em outras palavras, dim1 + dim2*size1 + dim3*size1*size2 + dim4*size1*size2*size3 + ...

Outras dicas

Eh, se você quiser algum código ... :-) C é a linguagem-agnóstico suficiente, ya?

Suponha entrada: a localização [dimensões]

Suponha existe uma tabela maxBound [dimensões] que contém os limites máximos de cada dimensão da tabela.

int index = 0;
int multiplier = 1;
for (int i = 0;i < dimensions;i++)
{
  index += location[i] * multiplier;
  multiplier *= maxBound[i];
}

Seu índice vai acabar no campo de índice.

Test:
location = [3,4,5]
maxBound = [10,20,30]
loop initial: index = 0, multiplier = 1.
loop i=0: index = 3, multiplier = 10.
loop i=1: index = 43, multiplier = 200.
loop i=2: index = 1043, multipler = 6000.

Eu acho que isso faz sentido, mas este é apenas saindo do topo da minha cabeça.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top