7 votos

Comprendiendo matrices.

Estoy tratando de entender las matrices.

Hasta donde entiendo, una matriz es una forma de representar datos (?) o alguna especie de función sobre los datos (?).

Sin embargo, aparte del hecho de que son una forma de representar datos (?), realmente no entiendo por qué necesitamos utilizarlas y para qué sirven. Te daré un ejemplo:

Soy un desarrollador de videojuegos y a menudo uso la conocida matriz de rotación en mis juegos. Cuando quiero rotar una forma por cierto ángulo, hago lo siguiente para cada vértice:

newX = cos(ángulo) - sin(ángulo)
newY = sin(ángulo) + cos(ángulo)

Esto funciona muy bien.

Sin embargo, no entiendo por qué necesitamos representarlo como una matriz (una tabla). La fórmula escrita arriba funciona bien, ¿qué gano pensando en ella como una matriz?

Por favor explícame qué gano utilizando matrices (tablas) y para qué exactamente se utilizan. Y por favor, sé suave con las matemáticas.

13voto

alumb Puntos 2586

Supongamos que estás trabajando en un juego de carreras de coches. Quieres representar, en 3D, una característica en una rueda giratoria de un coche que a su vez está girando. La ubicación de la característica se da por una traslación desde el centro de la rueda, seguida por una rotación de la rueda, seguida por una traslación desde algún punto de referencia en el coche, seguida por la rotación del coche que a su vez está trasladado. Eso son 4 o 5 transformaciones seguidas, dependiendo de cómo lo mires. No quieres realizar 5 transformaciones para cada característica en la rueda.

Si tienes un mapa lineal en un espacio de $n$ dimensiones entonces una vez que hayas muestreado el valor del mapa en $n$ puntos (que forman una base) puedes deducir cuál es el valor en cualquier punto en el espacio. Entonces, si deseas evaluar un mapeo lineal en 100 puntos en un espacio 3D, solo tienes que evaluarlo en 3 puntos y puedes usar el resultado para calcular el valor en los 100 puntos. Esto es cierto incluso si el mapeo lineal es una composición de mil millones de transformaciones. Puedes realizar las mil millones de operaciones en solo 3 puntos y luego extender a 100 puntos es un trabajo trivial adicional. Y ese es el punto de las matrices: ofrece una forma de organizar tus cálculos para que solo tengas que aplicar tu secuencia de transformaciones a un puñado de puntos. Ese proceso te da una sola transformación que resume la combinación de todas las transformaciones, y luego aplicar eso al resto de los puntos es una simple computación.

En el caso de la rueda giratoria: solo tienes que realizar tus 4 o 5 transformaciones para solo 4 puntos y eso te dará una matriz. Ahora puedes usar esta matriz para calcular rápidamente la transformación para cada otro punto en la rueda. No tienes que calcular por separado la secuencia de 4 o 5 operaciones para cada punto individual.

Adicional: si te estás preguntando por qué se requieren 4 puntos y no solo 3, mira mi respuesta aquí: ¿Por qué las matrices de transformación $3D$ son de $4 \times 4$ en lugar de $3 \times 3$?

3voto

kerchee Puntos 66

Como has señalado, las matrices son simplemente una forma de escribir ciertos tipos de funciones. Aquí estás tratando con la función que envía un punto $(x, y)$ a su imagen bajo una rotación. Dado que las nuevas coordenadas son simplemente las antiguas, multiplicadas por coeficientes y sumadas, podemos especificar la función solo especificando los coeficientes. Una tabla es entonces una forma conveniente de escribirlos.

Realmente no hay mucho más, es solo una abreviatura conveniente.

Quizás lo entiendas mejor al notar que no es como si esto fuera algo que hacemos solo para rotaciones. Lo hacemos para cualquier función lineal, que es una función en la que mapeamos varios valores de entrada a varios valores de salida multiplicando los valores de entrada por ciertos coeficientes y sumándolos. Nuevamente, cualquier función de este tipo se puede determinar solo conociendo los coeficientes, por lo que una forma abreviada de escribir la función es simplemente escribir los coeficientes en una tabla. Es decir, digamos que tenemos una función dada por:

$$\begin{align} \text{newX} = a\cdot\text{oldX} + b\cdot\text{oldY} \\ \text{newY} = c\cdot\text{oldX} + d\cdot\text{oldY} \end{align}$$

La única información que necesitamos para especificar esta función son los números $a, b, c$ y $d$, por lo que podemos representar esta función con la matriz $\bigl(\begin{smallmatrix}a&b\\ c&d\end{smallmatrix} \bigr)$. Y lo mismo para más de $2$ entradas/salidas.

La pregunta es: ¿por qué las funciones lineales son lo suficientemente importantes como para merecer una notación abreviada especial? Es por donde encajan en este diagrama de Venn:

enter image description here

Las funciones lineales son comunes, ocurren con frecuencia en aplicaciones, lo cual no es sorprendente, dado que "multiplicar por coeficientes y luego sumar" es un tipo de regla bastante simple. Son simples, es muy fácil calcular con ellas y resolver problemas que las involucran. Y son matemáticamente ricas, hay mucho que decir sobre ellas, muchos fenómenos matemáticos interesantes surgen de las funciones lineales.

Ahora, si estás utilizando un marco gráfico como Flash con ActionScript 3, es posible que tengas que rotar objetos gráficos usando código algo así:

rotate = new Matrix(cos, -sin, sin, cos);
sprite.applyMatrix(rotate);

Y quizás te estés preguntando por qué no es simplemente:

sprite.rotate(angle);

(Por supuesto, muchos marcos de trabajo tienen funciones como la segunda, pero sospecho que en el fondo siguen haciendo algo como el primer ejemplo).

Supongo que esto es solo para permitirte aplicar funciones lineales arbitrarias a tu sprite, en lugar de solo rotaciones (como escalados, sesgados y reflejos), manteniendo un backend simple en el motor gráfico. De esta manera, si aplicas varias transformaciones lineales a la vez, ya que las estás suministrando como matrices, el programa simplemente puede combinar las matrices en una sola y aplicar todas las transformaciones lineales al mismo tiempo, lo cual presumiblemente es menos costoso computacionalmente.

3voto

Gordon Freeman Puntos 409

Las matrices son omnipresentes en gráficos por computadora (como juegos) porque son muy poderosas:

(1) Pueden representar muchos tipos diferentes de transformaciones de manera uniforme, incluyendo:

  • Rotación
  • Traslación
  • Escala
  • Cizallamiento
  • Reflejo
  • Proyección ortográfica
  • Proyección perspectiva
  • Cualquier combinación de estas

Esto simplifica el diseño del código y ofrece gran flexibilidad. Por ejemplo, en un gráfico de escena podemos asignar una matriz de transformación 4x4 a un nodo y podemos usar inmediatamente todas estas transformaciones.

(2) Las cadenas de transformaciones pueden fusionarse en una sola matriz multiplicando las matrices correspondientes. ¡Esto es muy importante para el rendimiento de renderización!

Una escena consta de muchas miles o incluso cientos de miles de vértices. Cada uno de ellos necesita ser transformado del espacio del modelo al espacio del mundo al espacio de la vista al espacio de la pantalla. Podemos precalcular esta transformación (matriz ModelViewProjection) y ahorrar muchos cálculos.

(3) A veces necesitamos revertir una transformación, por ejemplo, para averiguar qué objeto ha sido seleccionado por el usuario. Con las matrices, esto es fácil: simplemente calcula la inversa.

2voto

Userpassword Puntos 106

Un beneficio que no se ha mencionado explícitamente en las otras respuestas hasta ahora es que las matrices pueden ser compuestas. Supongamos que tienes transformaciones $T_1$ y $T_2$ que deseas aplicar a muchos puntos. Si estas transformaciones no están implementadas como matrices, simplemente tendrías que aplicar literalmente $T_1$ y luego $T_2$ a todos los puntos. Sin embargo, si las transformaciones están representadas como matrices, puedes calcular una sola matriz $T_3$ que corresponde a "hacer $T_1$ y luego $T_2$" y aplicar esa única matriz a todos los puntos. Dado que $T_3$ es muy fácil de calcular, eso significa que has reducido tu trabajo a la mitad.

Supongamos que $T_1 = \begin{pmatrix}a&b\\c&d\end{pmatrix}$ y $T_2 = \begin{pmatrix}e&f\\g&h\end{pmatrix}$. El resultado de aplicar $T_1$ a $\begin{pmatrix}x\\y\end{pmatrix}$ es

$$\begin{pmatrix}a&b\\c&d\end{pmatrix}\begin{pmatrix}x\\y\end{pmatrix} = \begin{pmatrix}ax+by\\cx+dy\end{pmatrix}\,;$$

al aplicar $T_2$ a eso da

$$\begin{pmatrix}e&f\\g&h\end{pmatrix}\begin{pmatrix}ax+by\\cx+dy\end{pmatrix} = \begin{pmatrix}e(ax+by)+f(cx+dy)\\g(ax+by)+h(cx+dy)\end{pmatrix} = \begin{pmatrix}(ae+cf)x + (be+df)y\\(ag+ch)x + (bg+dh)y\end{pmatrix}\,.$$

Pero esto es exactamente lo mismo que $$\begin{pmatrix}ae+cf & be+df\\ ag+ch & bg+dh\end{pmatrix}\begin{pmatrix}x\\y\end{pmatrix}\,,$$ así que puedes llamar a esta nueva matriz $T_3$, calcularla una vez (ahora puedes ver lo barato que es) y luego aplicarla a todos tus puntos. Escribimos $T_3=T_2T_1$; nota que esto no es necesariamente lo mismo que $T_1T_2$, lo cual significaría "Hacer $T_2$ y luego $T_1$." Los mismos principios se aplican a matrices de dimensiones superiores.

1voto

Ajay Puntos 1

Las matrices aparecen primero en la historia como una forma de representar los coeficientes de un sistema lineal en una estructura que tiene filas y columnas. Supongamos que tienes el sistema de ecuaciones lineales: $$ax + by = e\\cx + dy = f$$ Puedes resolver este sistema haciendo adición de filas, sustracción y multiplicación por escalar.

Es aburrido volver a escribir todo el sistema después de hacer alguna operación de fila, por lo que podemos escribir solo los coeficientes de $x$ e $y$ en una estructura que llamaremos matriz: $$\begin{bmatrix} a & b \\ c & d \end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} e \\ f \end{bmatrix}$$ Entonces, podemos sumar, restar y multiplicar las filas de esta matriz $\begin{bmatrix} a & b \\ c & d \end{bmatrix}$ sin preocuparnos por los coeficientes.

Cuando haces estas operaciones de manera que eliminas $y$, encontrarás que: $$x = \frac{ed-bf}{ad-bc}$$ Y cuando haces lo mismo para $x encontrarás: $$y = \frac{af-ec}{ad-bc}$$ Siempre encontrarás una solución para el sistema, cuando $ad-bc\neq0$, así que llamemos a este número $ad-bc$ como 'determinante', porque determinará cuándo el sistema tiene solución.

Esta regla funciona para cualquier sistema cuadrado de ecuaciones, no solo para el caso 2x2, pero entonces el determinante será diferente. La generalización de esto se llama Regla de Cramer

Si avanzamos en nuestro estudio de matrices, entonces podemos definir transformaciones, que son formas de multiplicar una matriz por un vector, (en tu caso, un vector es una matriz de una sola columna que tiene los componentes $x$ e $y$, y que especifican la posición de tu objeto. Un vector es solo un punto $(x,y)$ en tu juego) esto transformará el vector (por ejemplo: rotarlo, escalarlo y trasladarlo). Cuando lo generalizamos, podemos multiplicar una matriz que rota un vector, por una matriz que lo traslada, y luego multiplicar por una matriz que lo escala, y obtener una sola matriz que, al multiplicarse con el vector, realizará estas 3 transformaciones al mismo tiempo. Esto tiene una gran utilidad en gráficos por computadora.

La fórmula que utilizas en tus juegos es una forma de aplicar una rotación a un vector $\begin{bmatrix} x \\ y \end{bmatrix}$, de esta manera:

$$\begin{bmatrix}\cos \theta & -\sin \theta \\\sin \theta & \cos \theta \\\end{bmatrix}\begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} \mbox{newX} \\ \mbox{newY} \end{bmatrix}$$

Si multiplicamos esta matriz por el vector $(x,y)$ obtendremos la 'fórmula' que tienes en tu pregunta.

Mientras solo trabajes con una simple rotación, puedes generalizar las matrices para hacer todo lo que desees, y crear tus propias matrices, que realizarán una transformación particular que necesitas. De esta manera, puedes usar tu tarjeta gráfica para multiplicar estas matrices más rápido de lo que lo haría tu computadora, y obtener mejores resultados.

Si deseas descubrir cómo crear esta matriz de rotación, y otros tipos de matrices, puedes ver la serie de videos de Khan Academy sobre transformaciones lineales, te explicará cómo encontrar esta fórmula para los casos 2D y 3D, y también cómo multiplicar diferentes matrices de transformación juntas.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X