O uso de vetores é extremamente comum e importante na programação. Em alguns casos porém acaba sendo um problema ter que lidar com vetores de 2 ou 3 dimensões. Neste tutorial vou mostrar como transformar 2 ou 3 índices em apenas 1.
vetor[2] indica a célula 2. Atenção, a célula 2 não é o mesmo que 2ª célula, pois a contagem se inicia no 0. Portenta célula 2 é a terceira posição do vetor.
Já nos vetores de maiores dimensões, novas coordenadas são necessárias para acessar uma célula, por exemplo:
status[2, 1]
status[1, 3, 4] //Lembrando que o Game Maker não suporta vetores 3D, portanto este método também é uma maneira de 'burlar' o sistema.
Deste modo não estamos mais utilizando o número da célula, mas sim suas coordenadas. Se imaginarmos um grid 3x3, a celula 0 estaria na posição (0,0) e a célula 8 estaria na posição (2,2).
0 1 2
3 4 5
6 7 8
Para transformar uma coordenada de duas dimensões em um indíce utilizamos a fórmula:
índice = x + y*linha
x e y são coordenadas
linha é o tamanho máximo da linha (3 no exemplo acima)
Na coordenada (1, 1) teremos e célula 4 pois: 1 + 1*3 = 4.
A lógica é simples, para cada linha completa adicionamos o número de células de uma linha e somamos à coordenada x.
Para 3 dimensções o raciocínio é semelhante:
índice = x + y * linha + (z * linha * coluna)
x, y e z são as coordenada
linha é o tamanho máximo da linha
coluna é o tamanho máximo da coluna
Além da posição definida por x e y, adicionamos também o número total de células a cada "andar" do eixo z. Podemos simplificar a fórmula colocando "linha" em evidência. Teremos então:
x + linha*(y + z * coluna)
Desta forma teremos o índice de qualquer célula localizada no plano x/y ou x/y/z.
Nenhum comentário :
Postar um comentário