2011-05-13 41 views
8

Actualmente estoy trabajando en el proyecto de donde 2d mapas de terreno se guardan en una matriz unidimensional. Cada bloque en el mapa está indexado por coordenadas xy. Entonces, para guardar el mapa en una matriz unidimensional, utilicé el método de orden de fila mayor (http://en.wikipedia.org/wiki/Row-major_order) para convertir las coordenadas xy en un único valor de índice (lo que me permite poner el bloque en una matriz).Índices de orden mayor de fila

Ahora, mi problema es cómo lo convierto de nuevo? Tengo un número único que debo volver a convertir en coordenadas xy. Cualquier ayuda sería apreciada. ^^

Respuesta

9

Para calcular los índices que usted debe utilizar algo como esto:

index = X + Y * Width; 

Así, para revertir ello se puede tomar ventaja de truncamiento división entera para conseguir Y, y entonces X es justo lo que le sobra después de qué "se acabó":

Y = (int)(index/Width) 
X = index - (Y * Width) 
+0

Eso no parece funcionar. Por ejemplo (0, 4) da 20 y cuando se invierte, 20 devuelve (16, 4) – BizarreCake

+0

Tiene la idea correcta, creo que acaba de hacer un error tipográfico. X = índice - (y * ancho); Entonces, X es lo que sobra después de eliminar las Filas utilizadas por Y. – TurqMage

+0

Oops, ¡esto es lo que surge al responder preguntas cuando acabas de salir de la cama! Gracias por corregirme. – Martin

Cuestiones relacionadas