Método Matrix::TransformVectors(Point*,INT) (gdiplusmatrix.h)
O método Matrix::TransformVectors multiplica cada vetor em uma matriz por essa matriz. Os elementos de translação da matriz (terceira linha) são ignorados. Cada vetor é tratado como uma matriz de linhas. A multiplicação é executada com a matriz de linha à esquerda e essa matriz à direita.
Sintaxe
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
Parâmetros
[in, out] pts
Tipo: Ponto*
Ponteiro para uma matriz de objetos Point que, na entrada, contém os vetores a serem transformados e, na saída, recebe os vetores transformados. Cada vetor na matriz é transformado (multiplicado por essa matriz) e atualizado com o resultado da transformação.
[in] count
Tipo: INT
Opcional. Inteiro que especifica o número de vetores a serem transformados. O valor padrão é 1.
Valor retornado
Tipo: Status
Se o método for bem-sucedido, ele retornará Ok, que é um elemento da enumeração Status .
Se o método falhar, ele retornará um dos outros elementos da enumeração Status .
Comentários
Enquanto um ponto representa a posição, um vetor representa uma entidade (por exemplo, velocidade ou aceleração) que tem uma direção e uma magnitude. Assim, os pontos de extremidade de um segmento de linha são pontos, mas sua diferença é um vetor — o comprimento e a direção desse segmento de linha.
Os vetores são semelhantes a pontos de várias maneiras. Como pontos, eles são representados por coordenadas x e y, portanto, o GDI+ usa as mesmas classes (Point e PointF) para representar vetores que usa para representar pontos. A diferença sutil entre vetores e pontos é a maneira como eles são afetados por transformações. No mundo físico, mover a origem do sistema de coordenadas altera as coordenadas de todos os pontos de posição, mas não alterará nenhum vetor de velocidade. Os vetores podem ser dimensionados, girados, retornados ou invertidos, mas não convertidos (movidos). Assim, quando uma transformação affine é aplicada a um vetor, o componente de tradução (a última linha da matriz) é ignorado.
Exemplos
O exemplo a seguir cria um vetor e um ponto. A ponta do vetor e o ponto estão no mesmo local: (100, 50). O código cria um objeto Matrix e inicializa seus elementos para que ele represente uma rotação no sentido horário seguida de uma tradução de 100 unidades à direita. O código chama o método Matrix::TransformPoints da matriz para transformar o ponto e chama o método Matrix::TransformVectors da matriz para transformar o vetor. Toda a transformação (rotação seguida de tradução) é executada no ponto, mas apenas a parte de rotação da transformação é executada no vetor. Os elementos da matriz que representam a tradução são ignorados pelo método Matrix::TransformVectors .
VOID Example_TransVectors(HDC hdc)
{
Graphics graphics(hdc);
Pen pen(Color(255, 0, 0, 255), 7);
pen.SetEndCap(LineCapArrowAnchor);
SolidBrush brush(Color(255, 0, 0, 255));
// A point and a vector, same representation but different behavior
Point point(100, 50);
Point vector(100, 50);
// Draw the original point and vector in blue.
graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);
graphics.DrawLine(&pen, Point(0, 0), vector);
// Transform.
Matrix matrix(0.8f, 0.6f, -0.6f, 0.8f, 100.0f, 0.0f);
matrix.TransformPoints(&point);
matrix.TransformVectors(&vector);
// Draw the transformed point and vector in red.
pen.SetColor(Color(255, 255, 0, 0));
brush.SetColor(Color(255, 255, 0, 0));
graphics.FillEllipse(&brush, point.X - 5, point.Y - 5, 10, 10);
graphics.DrawLine(&pen, Point(0, 0), vector);
}
Requisitos
Cliente mínimo com suporte | Windows XP, Windows 2000 Professional [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows 2000 Server [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | gdiplusmatrix.h (inclua Gdiplus.h) |
Biblioteca | Gdiplus.lib |
DLL | Gdiplus.dll |
Confira também
Transformações globais e locais