Поделиться через


Метод Matrix::TransformVectors(Point*,INT) (gdiplusmatrix.h)

Метод Matrix::TransformVectors умножает каждый вектор в массиве на эту матрицу. Элементы смещения данной матрицы (третья строка) игнорируются. Каждый вектор обрабатывается как матрица строк. Умножение выполняется с матрицей строк слева и этой матрицей справа.

Синтаксис

Status TransformVectors(
  [in, out] Point *pts,
  [in]      INT   count
);

Параметры

[in, out] pts

Тип: Point*

Указатель на массив объектов Point , который на входных данных содержит преобразуемые векторы, а на выходных данных получает преобразованные векторы. Каждый вектор в массиве преобразуется (умножается на эту матрицу) и обновляется с учетом результата преобразования.

[in] count

Тип: INT

Необязательный элемент. Целое число, указывающее количество векторов для преобразования. Значение по умолчанию — 1.

Возвращаемое значение

Тип: Состояние

В случае успешного выполнения метода возвращается ОК, который является элементом перечисления Status .

Если метод завершается ошибкой, он возвращает один из других элементов перечисления Status .

Комментарии

В то время как точка представляет позицию, вектор представляет сущность (например, скорость или ускорение), которая имеет направление и величину. Таким образом, конечными точками сегмента линии являются точки, но их различие является вектором — длиной и направлением этого сегмента линии.

Векторы во многом похожи на точки. Как и точки, они представлены координатами x и y, поэтому GDI+ использует те же классы (Point и PointF) для представления векторов, как и для представления точек. Незначительное различие между векторами и точками заключается в том, как на них влияют преобразования. В физическом мире перемещение системы координат изменяет координаты всех точек положения, но не изменяет векторы скорости. Векторы можно масштабировать, поворачивать, сдвигать или переворачивать, но не переводить (перемещать). Таким образом, при применении аффинного преобразования к вектору компонент преобразования (последняя строка матрицы) игнорируется.

Примеры

В следующем примере создаются вектор и точка. Кончик вектора и точка находятся в одном расположении: (100, 50). Код создает объект Matrix и инициализирует его элементы таким образом, чтобы он представлял поворот по часовой стрелке, за которым следует преобразование 100 единиц вправо. Код вызывает метод Matrix::TransformPoints матрицы для преобразования точки и вызывает метод Matrix::TransformVectors матрицы для преобразования вектора. Все преобразование (поворот с последующим преобразованием) выполняется в точке, но только часть поворота преобразования выполняется в векторе. Элементы матрицы, представляющие перевод, игнорируются методом 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); 
}

Требования

   
Минимальная версия клиента Windows XP, Windows 2000 Профессиональная [только классические приложения]
Минимальная версия сервера Windows 2000 Server [только классические приложения]
Целевая платформа Windows
Header gdiplusmatrix.h (включая Gdiplus.h)
Библиотека Gdiplus.lib
DLL Gdiplus.dll

См. также раздел

Глобальные и локальные преобразования

Матрица

Матричное представление преобразований

Point

Методы TransformPoints

Методы TransformVectors

Преобразования