62. Aplicaciones de matrices en programación

Las matrices permiten representar estructuras con filas y columnas: tableros, imágenes, mapas, datos y transformaciones geométricas.

62.1 Introducción

Las matrices son útiles porque muchos problemas de programación tienen forma de tabla, grilla o colección de valores relacionados por posición.

Una matriz puede representar:
un tablero, una imagen, un mapa, una tabla de datos o una transformación.

Entender esta estructura permite organizar información y recorrerla con algoritmos claros.

62.2 Tableros de juego

Un tablero se puede modelar como una matriz donde cada celda tiene un valor.

const tablero = [
  ["X", "", "O"],
  ["", "X", ""],
  ["O", "", "X"]
];

console.log(tablero[0][0]);
console.log(tablero[1][1]);
console.log(tablero[2][2]);

La primera posición indica la fila y la segunda indica la columna.

62.3 Buscar una celda en un tablero

Recorrer una matriz permite encontrar posiciones que cumplen una condición.

function buscarValor(tablero, valor) {
  for (let fila = 0; fila < tablero.length; fila++) {
    for (let columna = 0; columna < tablero[fila].length; columna++) {
      if (tablero[fila][columna] === valor) {
        return { fila, columna };
      }
    }
  }

  return null;
}

const tablero = [
  ["", "", ""],
  ["", "X", ""],
  ["", "", "O"]
];

console.log(buscarValor(tablero, "X"));

Este patrón sirve para juegos, editores de mapas y grillas interactivas.

62.4 Mapas de niveles

En videojuegos, una matriz puede representar paredes, caminos, monedas o enemigos.

const mapa = [
  [1, 1, 1, 1],
  [1, 0, 0, 1],
  [1, 0, 2, 1],
  [1, 1, 1, 1]
];

console.log(mapa[1][1]); // camino
console.log(mapa[2][2]); // objeto especial

Los números funcionan como códigos para interpretar cada celda.

62.5 Contar elementos de un mapa

Un recorrido completo permite contar cuántas celdas tienen cierto significado.

function contarCeldas(mapa, codigo) {
  let cantidad = 0;

  for (let fila = 0; fila < mapa.length; fila++) {
    for (let columna = 0; columna < mapa[fila].length; columna++) {
      if (mapa[fila][columna] === codigo) {
        cantidad++;
      }
    }
  }

  return cantidad;
}

const mapa = [
  [1, 1, 1],
  [1, 0, 2],
  [1, 0, 0]
];

console.log(contarCeldas(mapa, 0));

Este cálculo puede indicar cuántos espacios libres, obstáculos u objetivos hay.

62.6 Imágenes como matrices

Una imagen digital puede pensarse como una matriz de píxeles. Cada píxel guarda información de color o intensidad.

Imagen en escala de grises:
[ 0 80 160 ]
[ 40 120 255 ]

Los valores cercanos a 0 representan tonos oscuros y los cercanos a 255 representan tonos claros.

62.7 Aumentar brillo

Modificar una imagen puede modelarse como aplicar una operación a cada elemento de la matriz.

function aumentarBrillo(imagen, incremento) {
  const resultado = [];

  for (let fila = 0; fila < imagen.length; fila++) {
    resultado[fila] = [];

    for (let columna = 0; columna < imagen[fila].length; columna++) {
      const nuevoValor = imagen[fila][columna] + incremento;
      resultado[fila][columna] = Math.min(nuevoValor, 255);
    }
  }

  return resultado;
}

const imagen = [[20, 80], [180, 240]];

console.log(aumentarBrillo(imagen, 40));

La función limita el valor máximo a 255 para mantener un rango válido.

62.8 Datos tabulares

Una matriz puede representar filas de datos numéricos, como ventas por sucursal y por mes.

const ventas = [
  [1200, 1500, 1800],
  [900, 1100, 1300],
  [2000, 2100, 2300]
];

console.log(ventas[0][2]);
console.log(ventas[2][1]);

Cada fila puede ser una sucursal y cada columna puede ser un mes.

62.9 Sumar por filas

Sumar cada fila permite obtener totales por registro.

function sumarFilas(matriz) {
  const totales = [];

  for (let fila = 0; fila < matriz.length; fila++) {
    let suma = 0;

    for (let columna = 0; columna < matriz[fila].length; columna++) {
      suma += matriz[fila][columna];
    }

    totales.push(suma);
  }

  return totales;
}

const ventas = [
  [1200, 1500, 1800],
  [900, 1100, 1300]
];

console.log(sumarFilas(ventas));

Este patrón aparece en reportes, balances y paneles de control.

62.10 Sumar por columnas

Sumar columnas permite comparar categorías, meses o variables.

function sumarColumnas(matriz) {
  const columnas = matriz[0].length;
  const totales = Array(columnas).fill(0);

  for (let fila = 0; fila < matriz.length; fila++) {
    for (let columna = 0; columna < columnas; columna++) {
      totales[columna] += matriz[fila][columna];
    }
  }

  return totales;
}

const ventas = [
  [1200, 1500, 1800],
  [900, 1100, 1300],
  [2000, 2100, 2300]
];

console.log(sumarColumnas(ventas));

La matriz permite analizar la información por diferentes direcciones.

62.11 Transformaciones 2D

En gráficos, las matrices pueden representar transformaciones como escalado, rotación o traslación.

Escalar un punto:
x' = x · escalaX
y' = y · escalaY

Aunque las bibliotecas gráficas suelen ocultar los detalles, internamente usan operaciones matriciales.

62.12 Escalar puntos

Una lista de puntos puede transformarse aplicando factores de escala a cada coordenada.

function escalarPuntos(puntos, escalaX, escalaY) {
  const resultado = [];

  for (let i = 0; i < puntos.length; i++) {
    resultado.push({
      x: puntos[i].x * escalaX,
      y: puntos[i].y * escalaY
    });
  }

  return resultado;
}

const puntos = [
  { x: 2, y: 3 },
  { x: 5, y: 1 }
];

console.log(escalarPuntos(puntos, 2, 3));

Esta idea se conecta con transformaciones más generales mediante matrices.

62.13 Matrices en inteligencia artificial

En inteligencia artificial, los datos y pesos de un modelo suelen organizarse como matrices.

Una fila puede representar una muestra.
Una columna puede representar una característica.
Una matriz de pesos puede transformar entradas en salidas.

Esta representación permite procesar muchos valores con operaciones repetitivas y eficientes.

62.14 Recomendaciones prácticas

Al trabajar con matrices en código, conviene mantener dimensiones claras y validar que todas las filas tengan la misma longitud.

function esMatrizRegular(matriz) {
  if (matriz.length === 0) {
    return true;
  }

  const columnas = matriz[0].length;

  for (let fila = 0; fila < matriz.length; fila++) {
    if (matriz[fila].length !== columnas) {
      return false;
    }
  }

  return true;
}

console.log(esMatrizRegular([[1, 2], [3, 4]]));
console.log(esMatrizRegular([[1, 2], [3]]));

Una matriz irregular puede romper algoritmos que esperan una estructura rectangular.

62.15 Conclusión

Las matrices son una herramienta práctica para modelar información con dos dimensiones. Su utilidad aparece en juegos, imágenes, mapas, datos, gráficos e inteligencia artificial.

Cuando un problema tiene filas, columnas o coordenadas, probablemente una matriz sea una buena representación.

En el próximo tema se estudiará la interpretación de fórmulas utilizadas en software.