Multiplicacion de Matrices

8

Click here to load reader

Transcript of Multiplicacion de Matrices

Page 1: Multiplicacion de Matrices

Textos Universitarios / Serie Docencia ________________________________________________________________________

431

Capítulo 935 Representación matricial de transformaciones 9.1 Matrices Una matriz m×n es un conjunto de números organizado en m filas y n columnas. En la siguiente ilustración se muestran varias matrices.

Es posible sumar dos matrices del mismo tamaño mediante la adición de elementos individuales. En la siguiente ilustración se muestran dos ejemplos de adición de matrices.

Una matriz m×n puede multiplicarse por una matriz n×p, y da como resultado una matriz m×p. El número de columnas de la primera matriz debe coincidir con el número de filas de la segunda matriz. Por ejemplo, una matriz 4×2 puede multiplicarse por una matriz 2×3 para generar una matriz 4×3. Los puntos en el plano y las filas y columnas de una matriz pueden considerarse como vectores. Por ejemplo, (2, 5) es un vector con dos componentes, y (3, 7, 1) es un vector con tres componentes. El producto de puntos de dos vectores se define de esta forma: (a, b) • (c, d) = ac + bd (a, b, c) • (d, e, f) = ad + be + cf 35 http://msdn.microsoft.com/library/en-us/gdicpp/GDIPlus/aboutGDIPlus/ coordinatesystemsandtransformations/matrixrepresentationoftransformations.asp Junio 3 de 2006

Page 2: Multiplicacion de Matrices

Jenaro C. Paz ________________________________________________________________________

432

Por ejemplo, el producto de puntos de los vectores (2, 3) y (5, 4) es (2)(5) + (3)(4) = 22. El producto de puntos de los vectores (2, 5, 1) y (4, 3, 1) es (2)(4) + (5)(3) + (1)(1) = 24. Observe que el producto de puntos de dos vectores es un número, no otro vector. Observe también que sólo se puede calcular el producto de puntos de dos vectores si éstos tienen el mismo número de componentes. Consideremos que A(i, j) es una entrada de la matriz A, en la fila i, columna j. Por ejemplo, A(3, 2) es una entrada de la matriz A, en la fila 3ª, columna 2ª. Supongamos que A, B y C son matrices, y que AB = C. Las entradas de C se calculan de esta forma: C(i, j) = (fila i de A) • (columna j de B) En la siguiente ilustración se muestran varios ejemplos de multiplicación de matrices.

9.2 Transformaciones con Matrices Si se considera un punto en un plano como una matriz 1×2, se puede transformar dicho punto multiplicándolo por una matriz 2×2. En la siguiente ilustración se muestran varias transformaciones que se han aplicado al punto (2, 1).

Page 3: Multiplicacion de Matrices

Textos Universitarios / Serie Docencia ________________________________________________________________________

433

Todas las transformaciones que se muestran en la ilustración anterior son transformaciones lineales. Otros tipos de transformaciones, como la traslación, no son lineales, y no pueden expresarse en forma de multiplicación por una matriz 2×2. Supongamos que se desea rotar 90 grados, trasladar 3 unidades en la dirección del eje x y trasladar 4 unidades en la dirección del eje y al punto (2, 1). Todo esto puede realizarse mediante una multiplicación de matrices seguida de una adición de matrices.

Se denomina transformación afín a una transformación lineal (multiplicación por una matriz 2x2) seguida de una traslación (adición de una matriz 1×2). Una alternativa al almacenamiento de una transformación afín en un par de matrices (una para la parte lineal y otra para la traslación) es el almacenamiento de la transformación completa en una matriz 3×3. Para que esto funcione, hay que almacenar un punto del plano en una matriz 1×3 con una 3ª coordenada ficticia. La técnica más habitual es hacer que todas las 3ª coordenadas sean igual a 1. Por ejemplo, el punto (2, 1) viene representado por la matriz [2 1 1]. En la siguiente ilustración se muestra una transformación afín (rotación de 90 grados, traslación de 3 unidades en la dirección del eje x y de 4 unidades en la dirección del eje y) que se expresa como multiplicación por una única matriz 3×3.

En el ejemplo anterior, el punto (2, 1) se asigna al punto (2, 6). Tenga en cuenta que la tercera columna de la matriz 3×3 contiene los números 0, 0, 1. Esto siempre será así para el caso de la matriz 3×3 de una transformación afín. Los números importantes son los seis

Page 4: Multiplicacion de Matrices

Jenaro C. Paz ________________________________________________________________________

434

números de las columnas 1 y 2. La parte superior izquierda 2×2 de la matriz representa la parte lineal de la transformación, y las dos primeras entradas de la 3ª fila representan la traslación.

En GDI+, es posible almacenar una transformación afín en un objeto Matrix. Como la tercera columna de una matriz que representa una transformación afín siempre es (0, 0, 1), cuando se construye un objeto Matrix, sólo se especifican los seis números de las dos primeras columnas. La instrucción Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) construye la matriz que se muestra en la ilustración anterior. 9.2.1 Transformaciones compuestas Una transformación compuesta es una secuencia de transformaciones, una tras otra. Observe las matrices y las transformaciones de la siguiente lista:

Si se comienza con el punto (2, 1), representado por la matriz [2 1 1], y se multiplica por A, después por B y después por C, el punto (2, 1) experimentará las tres transformaciones en el orden indicado. [2 1 1]ABC = [-2 5 1] En lugar de almacenar las tres partes de la transformación compuesta en tres matrices independientes, se pueden multiplicar A, B y C a la vez para obtener una única matriz 3×3 que almacene toda la transformación compuesta. Supongamos que ABC = D. En este caso, un punto multiplicado por D da el mismo resultado que un punto multiplicado por A, después por B y después por C. [2 1 1]D = [-2 5 1] En la siguiente ilustración se muestran las matrices A, B, C y D.

Page 5: Multiplicacion de Matrices

Textos Universitarios / Serie Docencia ________________________________________________________________________

435

El hecho de que la matriz de una transformación compuesta pueda crearse multiplicando matrices de transformación individuales significa que puede almacenarse cualquier secuencia de transformaciones afines en un único objeto Matrix. PRECAUCIÓN El orden en una transformación compuesta es importante. En general, un orden de rotación, ajuste de escala y traslación no es lo mismo que un orden de ajuste de escala, rotación y traslación. Análogamente, el orden de multiplicación de matrices es importante. En general, ABC no es lo mismo que BAC. La clase Matrix proporciona varios métodos para generar una transformación compuesta: Multiply, Rotate, RotateAt, Scale, Shear y Translate. En el siguiente ejemplo se crea la matriz de una transformación compuesta que, primero, rota 30 grados, después ajusta la escala en un factor de 2 en la dirección del eje y, y después se traslada 5 unidades en la dirección del eje x: [C#] Matrix myMatrix = new Matrix(); myMatrix.Rotate(30); myMatrix.Scale(1, 2, MatrixOrder.Append); myMatrix.Translate(5, 0, MatrixOrder.Append); En la siguiente ilustración se muestra la matriz.

9.3 Clase Matrix Requisitos Espacio de nombres: System.Drawing.Drawing2D.Matrix

Encapsula una matriz afín de 3 por 3 que representa una transformación geométrica. No se puede heredar esta clase.

Page 6: Multiplicacion de Matrices

Jenaro C. Paz ________________________________________________________________________

436

9.3.1 Constructores públicos

Matrix (Constructor) Sobrecargado. Inicializa una nueva instancia de la clase Matrix.

9.3.2 Propiedades públicas

Elements Obtiene una matriz de valores numéricos de punto flotante que representa los elementos de este objeto Matrix.

IsIdentity Obtiene un valor que indica si este objeto Matrix es la matriz de identidad.

IsInvertible Obtiene un valor que indica si este objeto Matrix se puede invertir.

OffsetX Obtiene el valor de conversión x (el valor dx o el elemento de la tercera fila, primera columna) de este objeto Matrix.

OffsetY Obtiene el valor de traducción y (el valor dy o el elemento de la tercera fila, segunda columna) de esta Matrix.

9.3.3 Métodos públicos

Clone Crea una copia exacta de este objeto Matrix. CreateObjRef (se hereda de

MarshalByRefObject) Crea un objeto que contiene toda la información relevante necesaria para generar un proxy utilizado para comunicarse con un objeto remoto.

Dispose Libera todos los recursos utilizados por este objeto Matrix.

Equals Reemplazado. Comprueba si el objeto especificado es un objeto Matrix y si es idéntico a este objeto Matrix.

GetHashCode Reemplazado. Devuelve un código hash. GetLifetimeService (se hereda de

MarshalByRefObject) Recupera el objeto de servicio de duración actual que controla la directiva de duración de esta instancia.

GetType (se hereda de Object) Obtiene el objeto Type de la instancia actual.

InitializeLifetimeService (se hereda de MarshalByRefObject)

Obtiene un objeto de servicio de duración para controlar la directiva de duración de esta instancia.

Page 7: Multiplicacion de Matrices

Textos Universitarios / Serie Docencia ________________________________________________________________________

437

Invert Invierte este objeto Matrix, si se puede invertir.

Multiply Sobrecargado. Multiplica este objeto Matrix por el objeto Matrix especificado anteponiéndole el objeto Matrix especificado.

Reset Restablece este objeto Matrix para que tenga los elementos de la matriz de identidad.

Rotate Sobrecargado. Aplica a este objeto Matrix un giro del ángulo especificado y en el sentido de las agujas del reloj en torno al origen.

RotateAt Sobrecargado. Aplica a este objeto Matrix un giro en el sentido de las agujas del reloj en torno al punto especificado anteponiendo el giro.

Scale Sobrecargado. Aplica el vector de escala especificado a este objeto Matrix anteponiendo el vector de escala.

Shear Sobrecargado. Aplica el vector de recorte especificado a este objeto Matrix anteponiendo el vector de recorte.

ToString (se hereda de Object) Devuelve un objeto String que representa al objeto Object actual.

TransformPoints Sobrecargado. Aplica la transformación geométrica que representa este objeto Matrix a una matriz de puntos.

TransformVectors Sobrecargado. Multiplica cada vector de una matriz por la matriz. Los elementos de conversión de esta matriz (tercera fila) se omiten.

Translate Sobrecargado. Aplica el vector de conversión especificado a este objeto Matrix anteponiendo el vector de conversión.

9.3.4 Métodos protegidos

Finalize Reemplazado. Limpia los recursos asignados a esta Matrix. En C# y C++, los finalizadores se expresan mediante la sintaxis del destructor.

MemberwiseClone (se hereda de Object) Crea una copia superficial del objeto Object actual.

Page 8: Multiplicacion de Matrices

Jenaro C. Paz ________________________________________________________________________

438