Matrix::TransformVectors(Point*,INT) メソッド (gdiplusmatrix.h)
Matrix::TransformVectors メソッドは、配列内の各ベクターにこの行列を乗算します。 この行列の平行移動要素 (3 番目の行) は無視されます。 各ベクトルは行行列として扱われます。 乗算は、左側に行行列、右側にこの行列を使用して実行されます。
構文
Status TransformVectors(
[in, out] Point *pts,
[in] INT count
);
パラメーター
[in, out] pts
種類: ポイント*
入力時に変換するベクトルを含み、出力時に変換されたベクトルを受け取る Point オブジェクトの配列へのポインター。 配列内の各ベクターは変換され (この行列で乗算されます)、変換の結果で更新されます。
[in] count
型: INT
省略可能。 変換するベクトルの数を指定する整数。 既定値は 1 です。
戻り値
種類: 状態
メソッドが成功した場合は、 Status 列挙体の要素である Ok を返します。
メソッドが失敗した場合は、 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 |