Matrix::TransformVectors (Point*,INT) 方法 (gdiplusmatrix.h)
Matrix::TransformVectors 方法将数组中的每个向量乘以此矩阵。 该矩阵的转换元素(第三行)被忽略。 每个向量都被视为一个行矩阵。 乘法执行时,行矩阵在左侧,此矩阵在右侧。
语法
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
parameters
[in, out] pts
类型: 点*
指向 Point 对象数组的指针,该数组在输入时包含要转换的矢量,并在输出时接收转换的矢量。 数组中的每个向量都经过转换 (乘以此矩阵) ,并使用转换结果进行更新。
[in] count
类型: INT
可选。 指定要转换的向量数的整数。 默认值为 1。
返回值
类型: 状态
如果该方法成功,则返回 Ok,这是 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 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | gdiplusmatrix.h (包括 Gdiplus.h) |
Library | Gdiplus.lib |
DLL | Gdiplus.dll |