Matrix::TransformVectors (Point*,INT) 方法 (gdiplusmatrix.h)
Matrix::TransformVectors方法會將陣列中的每個向量乘以這個矩陣。 這個矩陣的轉換項目 (第三列) 會被忽略。 每個向量都會被視為資料列矩陣。 乘法是使用左邊的資料列矩陣和右邊的這個矩陣來執行。
語法
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
參數
[in, out] pts
類型: 點*
Point物件的陣列指標,在輸入時包含要轉換的向量,而且在輸出時接收轉換的向量。 陣列中的每個向量都會轉換 (乘以此矩陣) ,並以轉換的結果更新。
[in] count
類型: INT
選擇性。 整數,指定要轉換的向量數目。 預設值是 1。
傳回值
類型: 狀態
如果方法成功,它會傳回 Ok,這是 Status 列舉的元素。
如果方法失敗,它會傳回 Status 列舉的其他其中一個專案。
備註
雖然點代表位置,但向量代表實體 (例如,方向和大小的速度或加速) 。 因此,線段的端點是點,但其差異是向量,也就是該線段的長度和方向。
向量在許多方面類似于點。 就像點一樣,它們是以 x 和 Y 座標來表示,因此 GDI+ 會使用相同的類別 (Point 和 PointF) 來表示向量,因為它用來代表點。 向量和點之間的細微差異是它們受到轉換影響的方式。 在實體世界中,移動座標系統的原點會變更所有位置點的座標,但不會改變任何速度向量。 向量可以縮放、旋轉、切割或翻轉,但無法轉譯 (移動) 。 因此,當 affine 轉換套用至向量時,會忽略矩陣的最後一個資料列) (轉譯元件。
範例
下列範例會建立向量和點。 向量和點的提示位於相同的位置: (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) |
程式庫 | Gdiplus.lib |
Dll | Gdiplus.dll |