Representação de matriz de transformações
Um m×n matriz é um conjunto de números, organizados em m linhas e n colunas. A ilustração a seguir mostra várias matrizes.
Você pode adicionar duas matrizes do mesmo tamanho, adicionando elementos individuais. A ilustração a seguir mostra dois exemplos de adição de matriz.
Um m×n matriz pode ser multiplicada por um n×p matriz e o resultado é um m×p matriz. O número de colunas na primeira matriz deve ser o mesmo que o número de linhas na segunda matriz. Por exemplo, uma matriz de 4 x 2 pode ser multiplicada por uma matriz de 2 × 3 para produzir uma matriz de 4 × 3.
Pontos no plano de linhas e colunas de uma matriz podem ser pensados como vetores. Por exemplo, (2, 5) é um vetor com dois componentes e (3, 7, 1) é um vetor de três componentes. O produto de ponto de dois vetores é definido da seguinte maneira:
(uma, • b) (c, d) = ac + bd
(a, b, c) • (d, e, f) = ad + be + cf
Por exemplo, o produto do ponto de (2, 3) e (5, 4) é (2)(5) + (3)(4) = 22. O produto de ponto (2, 5, 1) e (4, 3, 1) é (2)(4) + (5)(3) + (1)(1) = 24. Observe que o produto de ponto de dois vetores é um número, e não outro vetor. Observe também que você pode calcular o produto ponto somente se os dois vetores têm o mesmo número de componentes.
Permitir que A(i, j) ser a entrada na matriz a na linha i e a coluna de jth. Por exemplo, A (2, 3) é a entrada na matriz a terceira linha e segunda coluna. Suponha que A, B e c são matrizes e AB = c. As entradas de c são calculadas da seguinte maneira:
C (i, j) = (linha i da) • (coluna j da B)
A ilustração a seguir mostra vários exemplos de multiplicação de matriz.
Se você acha de um ponto em um plano como uma matriz de 1 x 2, você pode transformar esse ponto multiplicando-a por uma matriz de 2 x 2. A ilustração a seguir mostra várias transformações aplicadas ao ponto (2, 1).
Todas as transformações, mostradas na figura anterior são transformações lineares. Determinadas outras transformações, como, por exemplo, a conversão, não lineares e não podem ser expresso como a multiplicação por uma matriz de 2 x 2. Suponha que você queira começar com o ponto (2, 1), girar 90 graus, traduzi-la 3 unidades na direção x e traduzi-la em 4 unidades na direção y. Você pode fazer isso usando uma multiplicação de matriz seguida de um acréscimo de matriz.
Uma transformação linear (multiplicação por uma matriz de 2 x 2), seguida de uma tradução (adição de uma matriz de 1 × 2) é chamada de uma transformação afim. Uma alternativa de uma transformação afim de armazenamento em um par de matrizes (um para a parte linear) e outro para a tradução é armazenar a transformação inteira em uma matriz de 3 × 3. Para fazer esse trabalho, um ponto no plano deve ser armazenado em uma matriz de 1 × 3 com uma coordenada de 3ª fictícia. A técnica comum é fazer com que todas as coordenadas 3ª igual a 1. Por exemplo, o ponto (2, 1) é representado por matriz [2 1 1]. A ilustração a seguir mostra uma transformação afim (girar 90 graus; Traduzir 3 unidades na direção x, 4 unidades na direção y) expresso como a multiplicação por uma matriz única de 3 × 3.
No exemplo anterior, o ponto (2, 1) é mapeado para o ponto (2, 6). Observe que a terceira coluna da matriz de 3 × 3 contém os números de 0, 0, 1. Isso será sempre o caso para a matriz de 3 × 3 de uma transformação afim. Os números de importantes são os seis números nas colunas 1 e 2. A parte de 2 × 2 superior esquerdo da matriz representa a parte linear da transformação e as duas primeiras entradas na terceira linha representam a tradução.
Em GDI+ você pode armazenar uma transformação afim em um Matrix objeto. Como a terceira coluna de uma matriz que representa uma transformação afim é sempre (0, 0, 1), você especificar somente os seis números nas duas primeiras colunas quando você construir um Matrix objeto. A instrução Matrix myMatrix = new Matrix(0, 1, -1, 0, 3, 4) constrói a matriz mostrada na figura anterior.
Transformações compostas
Uma transformação composta é uma seqüência de transformações, um seguido de outro. Considere a matrizes e transformações na lista a seguir:
Matriz A |
Girar 90 graus |
Matriz B |
Escala por um fator de 2 na direção x |
Matriz C |
Traduzir 3 unidades na direção y |
Se começar com o ponto (2, 1) – representado por matriz [2 1 1] — e a multiplicar por, em seguida, B e C, o ponto (2, 1) será passam por três transformações na ordem listada.
[2 1 1]ABC = [-2 5 1]
Em vez de armazenar as três partes da transformação composta em três matrizes separadas, multiplique A, B e c juntos para obter uma única matriz de 3 × 3 armazena toda transformação composta. Suponha que a ABC = d. Em seguida, um ponto multiplicado por d fornece o mesmo resultado como um ponto multiplicado por A, B e, em seguida, c.
[2 1 1]D = [-2 5 1]
A ilustração a seguir mostra as matrizes A, B, C e d.
O fato de que a matriz de uma transformação da composição pode ser formada por multiplicar as matrizes de transformação individuais significa que qualquer seqüência de transformações afim pode ser armazenada em um único Matrix objeto.
Aviso
A ordem de uma transformação composta é importante. Em geral, girar, e escala, em seguida traduzir é não o mesmo como dimensionar, girar, então traduzir. Da mesma forma, a ordem de multiplicação de matriz é importante. Em geral, ABC não é igual a OAT.
O Matrix classe fornece vários métodos para a criação de uma transformação de composição: Multiply, Rotate, RotateAt, Scale, Shear, and Translate. O exemplo a seguir cria a matriz de transformação de composição que primeiro gira 30 graus, dimensiona por um fator de 2 na direção y e, em seguida, converte 5 unidades na direção x:
Dim myMatrix As New Matrix()
myMatrix.Rotate(30)
myMatrix.Scale(1, 2, MatrixOrder.Append)
myMatrix.Translate(5, 0, MatrixOrder.Append)
Matrix myMatrix = new Matrix();
myMatrix.Rotate(30);
myMatrix.Scale(1, 2, MatrixOrder.Append);
myMatrix.Translate(5, 0, MatrixOrder.Append);
A ilustração a seguir mostra a matriz.