次の方法で共有


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+ では、ポイントを表すために使用するベクトルと同じクラス (PointPointF) を使用してベクトルを表します。 ベクトルとポイントの微妙な違いは、変換の影響を受ける方法です。 物理世界では、座標系の原点を移動すると、すべての位置ポイントの座標が変更されますが、速度ベクトルは変更されません。 ベクトルはスケーリング、回転、せん断、または反転できますが、変換 (移動) することはできません。 したがって、アフィン変換をベクターに適用すると、変換コンポーネント (行列の最後の行) は無視されます。

次の例では、ベクトルと点を作成します。 ベクトルの先端と点は同じ位置にあります(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

関連項目

グローバル変換とローカル変換

マトリックス

変換の行列表現

Point

TransformPoints メソッド

TransformVectors メソッド

変換