Digamos que tienes una matriz 2d:
const matrix = [ [0, 1, 2, 3, 4, 5], [0, 1, 2, 3, 4, 5] ];
Que se representa como una lista:
const list = [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5];
Puede generar fácilmente el índice de la lista en la lista usando lo siguiente:
function coordsToListIndex({ x, y }, width) { return x + (y * width); } // index = 7 const index = coordsToListIndex({ x: 1, y: 1 }, 6);
¿Cuál es la mejor manera de traducir en la dirección opuesta, del índice de la lista a las coordenadas?
Lo que se me ocurrió es lo siguiente, pero sospecho que podría haber una mejor manera.
function listIndexToCoords(index, width) { let count = 0; let x = 0; let y = 0; for (let i = 0; i < width; i++) { count++; x++; if (count === index) { break; } else if (i == width - 1) { x = 0; y++; i = 0; } } return { x, y }; } // cords = { x: 1, y: 1 } const coords = listIndexToCoords(7, 6);
Basado en aportes y soluciones de
Mike 'Pomax' Kamermans y shawn_halayka en los comentarios de arriba.
function coordsToListIndex({ x, y }, width) { return x + (y * width); } function listIndexToCoords(index, width) { return { x: index % width, y: Math.floor(index / width) }; }