Compartir a través de


Representación de matriz de transformaciones

Una matriz m×n es un conjunto de números organizados en filas m y n columnas. En la ilustración siguiente se muestran varias matrices.

Ilustración de matrices.

Puede agregar dos matrices del mismo tamaño agregando elementos individuales. En la ilustración siguiente se muestran dos ejemplos de adición de matriz.

Ilustración de la adición de matriz.

Una matriz m×n se puede multiplicar por una matriz n×p y el resultado es una matriz m×p. El número de columnas de la primera matriz debe ser el mismo que el número de filas de la segunda matriz. Por ejemplo, una matriz 4×2 se puede multiplicar por una matriz 2×3 para generar una matriz 4×3.

Los puntos del plano y las filas y columnas de una matriz se pueden considerar 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 punto de dos vectores se define de la siguiente manera:

(a, b) • (c, d) = ac + bd

(a, b, c) • (d, e, f) = ad + be + cf

Por ejemplo, el producto de punto de (2, 3) y (5, 4) es (2)(5) + (3)(4) = 22. El producto de punto de (2, 5, 1) y (4, 3, 1) es (2)(4) + (5)(3) + (1)(1) = 24. Tenga en cuenta que el producto de punto de dos vectores es un número, no otro vector. Tenga en cuenta también que solo puede calcular el producto de puntos si los dos vectores tienen el mismo número de componentes.

Deje que A(i, j) sea la entrada de la matriz A en la fila ith y la columna jth. Por ejemplo, A(3, 2) es la entrada de la matriz A en la tercera fila y la segunda columna. Supongamos que A, B y C son matrices y AB = C. Las entradas de C se calculan de la siguiente manera:

C(i, j) = (fila i de A) • (columna j de B)

En la ilustración siguiente se muestran varios ejemplos de multiplicación de matriz.

Ilustración de la multiplicación de matriz.

Si piensa en un punto de un plano como una matriz 1×2, puede transformar ese punto multiplicando por una matriz 2×2. En la ilustración siguiente se muestran varias transformaciones aplicadas al punto (2, 1).

Transformación de matriz en un punto de un plano.

Todas las transformaciones que se muestran en la ilustración anterior son transformaciones lineales. Algunas otras transformaciones, como la traducción, no son lineales y no se pueden expresar como multiplicaciones por una matriz 2×2. Supongamos que quiere empezar con el punto (2, 1), girarlo 90 grados, traducirlo 3 unidades en la dirección x y traducirlo 4 unidades en la dirección y. Para ello, puede usar una multiplicación de matriz seguida de una adición de matriz.

Ilustración de la multiplicación de matriz seguida de una adición de matriz.

Una transformación lineal (multiplicación por una matriz 2×2) seguida de una traducción (adición de una matriz 1×2) se denomina transformación affine. Una alternativa a almacenar una transformación afín en un par de matrices (una para la parte lineal y otra para la traducción) es almacenar toda la transformación en una matriz 3×3. Para que esto funcione, un punto del plano debe almacenarse en una matriz 1×3 con una coordenada ficticia 3ª. La técnica habitual es hacer que todas las coordenadas 3ª sean iguales a 1. Por ejemplo, el punto (2, 1) se representa mediante la matriz [2 1 1]. En la ilustración siguiente se muestra una transformación afín (girar 90 grados; traducir 3 unidades en la dirección x, 4 unidades en la dirección y) expresadas como multiplicación por una sola matriz de 3×3.

Ilustración de una transformación afín.

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á el caso de la matriz 3×3 de una transformación afín. Los números importantes son los seis 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 tercera fila representan la traducción.

Ilustración de la parte lineal y de traducción de una transformación de matriz.

En GDI+ puede almacenar una transformación affine en un Matrix objeto . Dado que la tercera columna de una matriz que representa una transformación affine siempre es (0, 0, 1), solo se especifican los seis números de las dos primeras columnas al construir un Matrix objeto . La instrucción Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) construye la matriz que se muestra en la ilustración anterior.

Transformaciones compuestas

Una transformación compuesta es una secuencia de transformaciones, una seguida de la otra. Tenga en cuenta las matrices y las transformaciones de la lista siguiente:

Matriz Transformación
Matriz A Girar 90 grados
Matriz B Escalar por un factor de 2 en la dirección del eje x
Matriz C Traducir 3 unidades en la dirección y

Si comenzamos con el punto (2, 1), representado por la matriz [2 1 1] y multiplicado por A, B, después C, el punto (2, 1) se somete a las tres transformaciones en el orden enumerado.

[2 1 1]ABC = [-2 5 1]

En lugar de almacenar las tres partes de la transformación compuesta en tres matrices independientes, puede multiplicar A, B y C juntas para obtener una sola matriz 3×3 que almacena toda la transformación compuesta. Supongamos QUE ABC = D. A continuación, un punto multiplicado por D da el mismo resultado que un punto multiplicado por A, después B y C.

[2 1 1]D = [-2 5 1]

En la ilustración siguiente se muestran las matrices A, B, C y D.

Ilustración de la matriz A, B, C y D.

El hecho de que la matriz de una transformación compuesta se puede formar multiplicando las matrices de transformación individuales significa que cualquier secuencia de transformaciones afín se puede almacenar en un solo Matrix objeto.

Precaución

El orden de una transformación compuesta es importante. En general, girar y, a continuación, escalar, traducir no es lo mismo que la escala, luego girar y luego traducir. Del mismo modo, el orden de multiplicación de matriz es importante. En general, ABC no es lo mismo que BAC.

La Matrix clase proporciona varios métodos para crear una transformación compuesta: Multiply, Rotate, RotateAtScale, , Sheary Translate. En el ejemplo siguiente se crea la matriz de una transformación compuesta que primero gira 30 grados, luego se escala por un factor de 2 en la dirección y, y a continuación traduce 5 unidades en la dirección x.

Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)

En la ilustración siguiente se muestra la matriz.

Ilustración de matriz de una transformación compuesta.

Consulte también