Matrices

De IberOgre

Este texto corresponde al segundo artículo sobre matemáticas relacionadas con el desarrollo de videojuegos en 3D en IberOgre. Tras conocer los conceptos básicos como la representación de puntos en un espacio tridimensional y el papel que juegan los vectores en el modelado de mundos nos trasladamos hasta las matrices. En este artículo haremos un repaso por su definición, operaciones y aplicaciones directas. Se tratará de mostrar en todo momento la utilidad real y práctica de cada aspecto con el objetivo de ilustrar y amenizar la lectura.


Contenido



Definición

Definimos una matriz como un vector rectangular de dimensión cuyos elementos son números reales o escalares. Estos elementos se organizan en filas (líneas horizontales) y columnas (líneas verticales). Se dice que una matriz tiene dimensión cuando consta de filas y columnas. Los elementos de la matriz son indexados mediante su fila y su columna comenzando desde el número 1 (a pesar de que varios lenguajes de programación comiencen por el 0). De esta manera, es el elemento de la matriz correspondiente a la fila y la columna . Representamos a las matrices con letras mayúsculas como y mostramos su contenido en una tabla rodeada por paréntesis.

Por ejemplo, sea la matriz de dimensiones 3 x 3:



Aquellas matrices con mismo número de filas y columnas se las conoce como matrices cuadradas. Decimos que es una matriz cuadrada de orden 3 cuando cuenta con 3 filas y 3 columnas.

Las matrices de orden 4, es decir, de tamañó 4 x 4 son las más útiles dentro del mundo del videojuego ya que son capaces de representar transformaciones lineales. Una matriz 4 x 4 puede contener información sobre el desplazamiento con respecto al origen, la escala y la rotación de un objeto en tres dimensiones. No es común que los usuarios de una biblioteca gráfica de alto nivel como Ogre trabajen con matrices de transformación pero es necesario saber que el propio motor hace un uso intensivo de las mismas. Las utiliza para renderizar objetos, hacer cálculos de iluminación, obtener la proyección de la cámara y un largo etcétera. No obstante, tampoco es extraño que el usuario se vea obligado a trabajar con estos conceptos en más de una ocasión, de ahí la importancia de comprenderlos.

Operaciones

En esta sección haremos un repaso por las operaciones más representativas de las matrices. En cada apartado trataremos de comentar alguna aplicación directa aunque muchas operaciones sirven como auxiliares de otras de mayor nivel. Deberías de recordar estos conceptos del instituto pero haremos la revisión en cualquier caso.

Suma de matrices

Para sumar dos matrices de dimensión y sumamos todos sus elementos de la forma . Nótese que ambas matrices deben tener las mismas dimensiones. Sean las matrices cuadradas de orden 3 y definimos su suma como:





La suma y resta de matrices cuenta con las siguientes propiedades:

  • Asociatividad:
  • Conmutatividad:
  • Elemento neutro:
  • Elemento opuesto:

Producto por un escalar

Dada una matriz y un número escalar se define el producto de una matriz por un escalar como:



Esta operación consta de las siguientes propiedades:

  • Clausura: es una matriz.
  • Asociatividad:
  • Elemento neutro:
  • Conmutatividad:
  • Distributividad: y

Si tenemos una matriz que representa una transformación de escala, podemos multiplicarla por un número real para aumentar o disminuir dicha escala.

Producto de matrices

Dadas dos matrices y se define su producto matricial como una nueva matriz tal que:





y sólo pueden multiplicarse si el número de colunas de es igual al número de filas de . El producto matricial cuenta con las siguientes propiedades:

  • Clausura: es una nueva matriz.
  • Elemento neutro: siendo la matriz identidad que veremos en la siguiente sección.
  • Asociatividad:
  • Distributividad con respecto a la suma: por la derecha y por la izquierda

Como ya hemos mencionado anteriormente y veremos en detalle más adelante, una matriz puede representar una transformación (desplazamiento, escala y rotación). Podemos considerar el producto de matrices de transformación como la aplicación de dichas transformaciones en cadena. Podemos tener una escala a la que le aplicamos una rotación o un desplazamiento. De hecho, el resultado de esa operación se puede encadenar con una nueva transformación. Nótese que el producto matricial no es conmutativo, esto implica que el orden al aplicar las transformaciones es importante y altera el resultado.

Matriz identidad

La matriz identidad se la conoce y representa como . Es una matriz cuadrada de orden cuyos elementos de la diagonal principal (descendente de izquierda a derecha) son iguales a 1 y el resto vale 0. Sea la matriz identidad de orden 3:



La matriz identidad destaca porque al ser multiplicada por otra, no altera sus valores (elemento neutro para el producto matricial).

Matriz inversa

La inversa de una matriz es una nueva matriz llamada que deshace los efectos de . Su propiedad más destacable es que . Esto significa que si tenemos una matriz representando una rotación de 90 grados con respecto al eje x, podemos deshacer sus efectos multiplicándola por su inversa. Incluso podemos deshacer una serie de transformaciones multiplicando por las inversas de las matrices que forman la secuencia en orden opuesto:



Es importante recalcar que no todas las matrices cuentan con inversas. No obstante, todas aquellas que representan transformaciones (desplazamientos, escalas y rotaciones) sí las tienen. No entraremos en los detalles de su cálculo y demostraciones de sus propiedades, las bibliotecas matemáticas que usarás ya incorporan dichos mecanismos.

Matriz transpuesta

La transpuesta de una matriz es una nueva matriz denotada por cuyas filas corresponden a las columnas de la original y viceversa. La operación se define como:




La propiedad más reseñable de la transpuesta de una matriz en relación con el desarrollo de videojuegos es que la inversa de una matriz de rotación (que no contenga otra transformación) es igual a su transpuesta. Calcular la transpuesta es mucho más barato en tiempo computacional que la inversa así que podemos utilizar esta operación en lugar de la inversa cuando pueda aplicarse. De hecho, podemos deshacer un encadenamiento de rotaciones utilizando la matriz transpuesta de la siguiente forma:



Transformaciones

Como ya hemos mencionado anteriormente, una matriz cuadrada de orden 4 puede representar una tranformación pura o producto de la concatenación de varias. Una transformación consta de un desplazamiento con respecto al origen de coordenadas, una escala (para aumentar o disminuir de tamaño) y una rotación con respecto a unos ejes de coordenadas arbitrarios. Todos los objetos de un videojuego tienen una transformación para localizarlos en el mundo que estamos representando. Cuando movemos un elemento, en realidad le estamos aplicando una transformación (producto de matrices). Esto indica la importancia de las transformaciones y las matrices en el desarrollo de videojuegos.

Las matrices de transformación pueden ser particionadas en los siguientes componentes:



  • La matriz cuadrada de orden 3 representa la rotación y/o la escala.
  • El vector corresponde a la traslación (desplazamiento con respecto al origen).
  • El vector nulo de tres elementos en vertical corresponde a una zona de la matriz no utilizada.
  • El escalar 1 en la esquina inferior derecha de la matriz tampoco es utilizado.

Desplazamiento

El desplazamiento viene dado por el vector . En el siguiente ejemplo, desplazaremos un punto por empleando una matriz de transformación pura, es decir, representando sólo el desplazamiento, sin rotación ni escala.



Podemos verlo de una forma esquematica siguiendo el ejemplo de particionado anterior:



Para hacer la inversa de una transformación de desplazamiento pura, simplemente invertimos el vector .

Rotación

Todas las matrices de transformación de orden 4 que sólo contengan una rotación vienen dadas de la siguiente forma:



El vector de translación es nulo y la matriz superior izquierda de orden 3 contiene los cosenos y senos del ángulo de la rotación medidos en radianes.

A continuación se muestra un ejemplo de rotación de radianes alrededor del eje :



La siguiente matriz representa una rotación sobre el eje en un ángulo . Esta matriz es la transpuesta con respecto a las demás, el seno positivo y negativo están reflejados con respecto a la diagonal.



La última matrix representa una rotación de radianes alrededor del eje :



Sobre las matrices de rotaciones cabe realizar varias observaciones:

  • El 1 situado en la matriz 3x3 superior aparece en el eje sobre el que rotamos.
  • Las rotaciones positivas van de a cuando giramos alrededor de ; de a cuando rotamos alrededor de y de a cuando lo hacemos alrededor de .
  • Para rotar por un ángulo negativo, utilizamos la matriz transpuesta, esto nos sirve también para deshacer rotaciones. Recordemos que y .

Escala

La siguiente matriz se muestra como ejemplo de escala de un punto por factores de forma respectiva a los tres ejes:



En su forma particionada:



De esto obtenemos varias observaciones:

  • Para invertir una operación de escalado la realizamos de nuevo con la inversa de los componentes de , es decir:
.
  • A la operación de escalado que emplea el mismo factor en los tres ejes se la conoce como uniforme.
  • Cuando combinamos rotación con escala, el orden de las operaciones importa a menos que el escalado sea uniforme.


Conclusiones

En este artículo hemos hecho un breve repaso por la definición y las operaciones más importantes que poseen las matrices. Así mismo, hemos visto la aplicación más evidente de las mismas en el mundo del videojuego, las transformaciones. Tras haber leído este artículo, debes mostrar cierta soltura a la hora de abordar documentación técnica al respecto. En los artículos de Ogre comprenderás los mecanismos y principios matemáticos que existen debajo de la interfaz de varias clases.

Herramientas personales