WhatsApp

  

Algoritmo de Matrices de Rotación 2D y 3D con Ejemplos en Python

Guía completa sobre matrices de rotación en 2D y 3D, su teoría matemática, implementación en Python y buenas prácticas para rendimiento y depuración.

Algoritmo de Matrices de Rotación 2D y 3D con Ejemplos en Python

Introducción

Las matrices de rotación son la base de cualquier motor gráfico, simulación física o proceso de visión por computadora. Permiten girar puntos, vectores o sistemas completos alrededor de un origen sin perder la longitud ni la ortogonalidad. En este artículo profundizamos en los fundamentos matemáticos de las rotaciones en 2 dimensiones (2D) y 3 dimensiones (3D), y presentamos implementaciones prácticas con NumPy en Python.

Rotación en 2D

Concepto matemático

Una rotación en el plano XY se describe mediante un ángulo θ medido en sentido antihorario. La matriz de rotación 2×2 es:

R(θ) = [[cosθ, -sinθ],
        [sinθ,  cosθ]]

Esta matriz es ortogonal (R·Rᵀ = I) y tiene determinante 1, lo que garantiza que la transformación conserva áreas y longitudes.

Implementación en Python

Usaremos numpy para crear la matriz y aplicar la rotación a un conjunto de puntos.

import numpy as np
def rot2d(theta_deg):
    """Devuelve la matriz de rotación 2D para un ángulo en grados."""
    theta = np.radians(theta_deg)
    c, s = np.cos(theta), np.sin(theta)
    return np.array([[c, -s],
                     [s,  c]])
# Ejemplo: rotar un triángulo
points = np.array([[0, 0], [1, 0], [0, 1]])  # vértices del triángulo
R = rot2d(45)                     # rotar 45°
rotated = points @ R.T            # (N,2) · (2,2)ᵀ
print(rotated)

Salida típica:

[[0.         0.        ]
 [0.70710678 0.70710678]
 [-0.70710678 0.70710678]]

Rotación en 3D

Ejes básicos

En 3D disponemos de tres ejes ortogonales: X, Y y Z. Cada uno tiene su propia matriz de rotación elemental:

  • Rotación alrededor de X (pitch):
    Rₓ(θ) = [[1, 0, 0],
            [0, cosθ, -sinθ],
            [0, sinθ,  cosθ]]
  • Rotación alrededor de Y (yaw):
    Rᵧ(θ) = [[ cosθ, 0, sinθ],
            [0, 1, 0],
            [-sinθ, 0, cosθ]]
  • Rotación alrededor de Z (roll):
    R𝓏(θ) = [[cosθ, -sinθ, 0],
            [sinθ,  cosθ, 0],
            [0, 0, 1]]

Combinación de rotaciones

Para rotaciones arbitrarias se multiplican las matrices en el orden deseado (recordar que la multiplicación no es conmutativa). Por ejemplo, una rotación yaw → pitch → roll se representa como:

R = R𝓏(roll) @ Rₓ(pitch) @ Rᵧ(yaw)

Esta convención es la más usada en gráficos 3D y robótica.

Implementación en Python (3D)

def rot_x(theta_deg):
    t = np.radians(theta_deg)
    c, s = np.cos(t), np.sin(t)
    return np.array([[1, 0, 0],
                     [0, c, -s],
                     [0, s,  c]])
def rot_y(theta_deg):
    t = np.radians(theta_deg)
    c, s = np.cos(t), np.sin(t)
    return np.array([[ c, 0, s],
                     [ 0, 1, 0],
                     [-s, 0, c]])
def rot_z(theta_deg):
    t = np.radians(theta_deg)
    c, s = np.cos(t), np.sin(t)
    return np.array([[c, -s, 0],
                     [s,  c, 0],
                     [0,  0, 1]])
# Rotación compuesta: yaw=30°, pitch=45°, roll=60°
R = rot_z(60) @ rot_x(45) @ rot_y(30)
# Rotar un cubo unitario
cube = np.array([[-0.5, -0.5, -0.5],
                 [ 0.5, -0.5, -0.5],
                 [ 0.5,  0.5, -0.5],
                 [-0.5,  0.5, -0.5],
                 [-0.5, -0.5,  0.5],
                 [ 0.5, -0.5,  0.5],
                 [ 0.5,  0.5,  0.5],
                 [-0.5,  0.5,  0.5]])
rotated_cube = cube @ R.T
print(rotated_cube)

Comparativa 2D ↔ 3D

Características de la Rotación 2D

  • Una única matriz 2×2.
  • Ángulo único (θ) alrededor del eje Z implícito.
  • Coste computacional: O(1) (4 multiplicaciones + 2 sumas).
  • Ideal para juegos 2D, UI, GIS planar.
  • No sufre gimbal lock (solo un grado de libertad).

Características de la Rotación 3D

  • Tres matrices elementales (3×3) o una composición.
  • Necesita tres ángulos (yaw, pitch, roll) o un cuaternión.
  • Coste computacional: O(1) pero ~27 multiplicaciones + 18 sumas por composición.
  • Fundamental para gráficos 3D, simulación física, robótica.
  • Propensa a gimbal lock si se usan ángulos de Euler; los cuaterniones lo evitan.

Mejores Prácticas y Optimización

  • Pre‑calcular seno y coseno cuando el ángulo es constante dentro de un bucle.
  • Utilizar np.dot o el operador @ en vez de bucles Python nativos.
  • Para animaciones en tiempo real, almacenar la matriz de rotación como float32 para reducir el tráfico de memoria.
  • En 3D, considerar cuaterniones para interpolación suave (slerp) y evitar gimbal lock.
  • Si la aplicación requiere cientos de miles de rotaciones por cuadro, evaluar SIMD vía numba o torch.

Solución de Problemas Comunes (Troubleshooting)

1. Rotación invertida

Los sistemas de coordenadas pueden ser derecha o izquierda. Verifique la convención de su entorno (OpenGL usa eje Z positivo hacia fuera, mientras que DirectX usa el opuesto).

2. Gimbal lock

Ocurre cuando dos ejes de rotación se alinean (por ejemplo, pitch = ±90°). Solución: cambiar a cuaterniones o usar una parametrización basada en matrices de dirección.

3. Pérdida de precisión

Al encadenar muchas rotaciones, los errores de redondeo pueden acumularse. Normalice la matriz resultante periódicamente (R = R / np.linalg.norm(R, axis=0)).

Casos de Uso del Mundo Real

  • Visor de imágenes 2D: rotar fotos sin perder calidad usando la matriz 2D.
  • Robótica: cálculo de la orientación del efector final mediante matrices de rotación 3D.
  • Realidad Aumentada: alinear objetos virtuales con la cámara usando cuaterniones convertidos a matrices 3D.
  • Simulación de física: aplicar torque como rotación incremental en cuerpos rígidos.

Conclusión

Las matrices de rotación son herramientas versátiles y de bajo coste computacional. Dominar su construcción en 2D y 3D, así como saber cuándo sustituirlas por cuaterniones, es esencial para cualquier profesional que trabaje con gráficos, visión por computadora o sistemas de control. Con los ejemplos en Python presentados, podrás integrar rotaciones robustas y optimizadas en tus proyectos desde el primer día.



Algoritmo de Matrices de Rotación 2D y 3D con Ejemplos en Python
ASIMOV Ingeniería S. de R.L. de C.V., Emiliano Nava 13 noviembre, 2025
Compartir
Iniciar sesión dejar un comentario

  
Algoritmo de Transformaciones Lineales: Conceptos, Ejemplos en Python y Mejores Prácticas
Guía completa sobre transformaciones lineales, su fundamento matemático, implementación en Python y casos de uso reales. Incluye comparativas, optimización y buenas prácticas.