¿Te resulta más fácil leer con fondo crema, un tono de color, más contraste o un texto más grande? Elige tus colores y tu texto una sola vez, para todas las páginas.

Lección gratuita

Rotar, escalar y reflejar con matrices

Después de esta lección: Puedo leer una matriz como un giro, una escala o un reflejo.

Lección de 60 min3 comandosLaboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

Una matriz mueve todos los puntos del plano

Una transformación lineal mueve cada punto de un plano de una forma fija: lo gira, lo estira o lo refleja. Una matriz de 2 por 2 la describe entera.

Así un juego gira a un personaje y así un programa de dibujo cambia el tamaño de una imagen. Al acabar sabrás leer una matriz y aplicarla a un punto.

Al final de esta lección

Nota

Puedo leer una matriz como un giro, una escala o un reflejo.

Palabras clave

PalabraQué significa
Transformaciónuna regla que mueve cada punto del plano
Giromover un punto en círculo alrededor del origen
Escalaestirar o encoger cada eje
Reflejodar la vuelta a un punto como en un espejo
Composiciónaplicar una transformación y después otra

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Las columnas dicen dónde caen los ejes

Un punto del plano es un vector [x, y]. Los dos puntos más simples son [1, 0], un paso a la derecha, y [0, 1], un paso hacia arriba.

La matriz por [1, 0] da su primera columna. La matriz por [0, 1] da su segunda. Si sabes dónde caen esos dos puntos, sabes dónde cae cualquier otro.

Ejemplo resuelto: tres matrices y un punto

MatrizQué haceDónde cae [1, 0]Dónde cae [2, 3]
[[0, -1], [1, 0]]Gira 90 grados[0, 1][-3, 2]
[[2, 0], [0, 3]]Estira por 2 a lo ancho y por 3 a lo alto[2, 0][4, 9]
[[1, 0], [0, -1]]Refleja arriba y abajo[1, 0][2, -3]

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Aplica una matriz a tres puntos

Código: python
# Una matriz de giro de 90 grados y tres puntos del plano.
giro = [[0, -1], [1, 0]]
puntos = [[1, 0], [0, 1], [2, 3]]

for punto in puntos:
    x = giro[0][0] * punto[0] + giro[0][1] * punto[1]
    y = giro[1][0] * punto[0] + giro[1][1] * punto[1]
    print(punto, "pasa a", [x, y])
# Cambia la matriz por [[2, 0], [0, 3]] y vuelve a ejecutar.
# ¿Qué pasa ahora con cada punto?

Gira tres puntos 90 grados

Comando
docker exec jupyter python3 -c "import numpy as np; R=np.array([[0,-1],[1,0]]); P=np.array([[1,0],[0,1],[2,3]]); print(([email protected]).tolist())"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un giro cualquiera usa seno y coseno

Para girar un ángulo cualquiera, la matriz usa dos números del ángulo: el coseno y el seno. Es [[coseno, -seno], [seno, coseno]].

Con 30 grados, el coseno es 0,866 y el seno es 0,5. El punto [1, 0] cae en [0,866, 0,5]: se ha elevado medio paso. Un giro nunca cambia la longitud de un vector.

Gira [1, 0] treinta grados

Comando
docker exec jupyter python3 -c "import numpy as np; t=np.radians(30); R=np.array([[np.cos(t),-np.sin(t)],[np.sin(t),np.cos(t)]]); print(np.round([email protected]([1,0]),3).tolist())"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Componer dos transformaciones es multiplicar sus matrices

Si primero escalas y después giras, el resultado es una sola matriz: la del giro por la de la escala. La que se aplica primero se escribe a la derecha, junto al vector.

Con la escala S y el giro R, R por S escala primero y gira después. S por R hace lo contrario y casi nunca da lo mismo.

Ejemplo resuelto: el orden cambia el resultado

OrdenMatriz finalDónde cae [1, 0]
Escalar y girar (R por S)[[0, -3], [2, 0]][1, 0] pasa a [2, 0] y luego a [0, 2]
Girar y escalar (S por R)[[0, -2], [3, 0]][1, 0] pasa a [0, 1] y luego a [0, 3]

Las celdas que rellenan los estudiantes quedan en blanco en esta vista previa.

Las dos composiciones

Comando
docker exec jupyter python3 -c "import numpy as np; R=np.array([[0,-1],[1,0]]); S=np.array([[2,0],[0,3]]); print((R@S).tolist(), (S@R).tolist(), (R@[email protected]([1,0])).tolist())"

Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.

Un error muy común

Advertencia

Mucha gente cree que, al componer, la primera transformación se escribe a la izquierda. Es al revés: la que se aplica primero queda junto al vector, a la derecha. Lee el producto de derecha a izquierda.

Para ir más lejos: un triángulo girado

Un triángulo son tres puntos. Aplica el giro de 90 grados a los tres y los nuevos puntos forman el mismo triángulo, girado.

Dibuja en papel cuadriculado [0, 0], [4, 0] y [0, 2]. Gira cada punto con la matriz de giro y dibuja el resultado.

Sobre este laboratorio y su código: Laboratorio JupyterLab de ciencia de datos: pandas, Matplotlib y scikit-learn en el navegador

¿Enseñas a una clase? Asigna este módulo a tus alumnos con guía del profesor, tareas con corrección automática y un laboratorio para cada alumno.