翻訳

一部のアプリケーションでは、クライアント領域に描画されたオブジェクトを翻訳 (またはシフト) します。 SetWorldTransform 関数を呼び出して、適切なワールド空間をページ空間変換に設定します。 SetWorldTransform 関数は、適切な値を含む XFORM 構造体へのポインターを受け取ります。 XFORM の eDx メンバーと eDy メンバーは、水平方向および垂直方向の翻訳コンポーネントをそれぞれ指定します。

変換が行われると、オブジェクト内の各ポイントは、指定した量だけ垂直方向、水平方向、またはその両方にシフトされます。 次の図は、ワールド座標空間からページ座標空間にコピーされたときに 10 単位だけ右に翻訳された 20 x 20 単位の四角形を示しています。

ワールド空間内の 1 つの位置とページ空間内の別の位置にある四角形を示す図

前の図では、四角形内の各点の x 座標は、元の x 座標より 10 単位大きい値です。

水平方向の翻訳は、次のアルゴリズムで表すことができます。

x' = x + Dx 

ここで、x' は新しい x 座標、x は元の x 座標、Dx は水平方向の移動距離です。

垂直方向の翻訳は、次のアルゴリズムで表すことができます。

y' = y + Dy 

ここで、y' は新しい y 座標、y は元の y 座標、Dy は垂直方向の移動距離です。

水平方向と垂直方向の変換変換は、3 対 3 の行列を使用して 1 つの操作に組み合わせることができます。

                      |1   0   0| 
|x' y' 1| = |x y 1| * |0   1   0| 
                      |Dx  Dy  1| 

(一方の行列の行数がもう一方の行列の列数と等しくなければならないという行列乗算状態のルール。行列 |x y 1 の整数 1|は、この要件を満たすために追加されたプレースホルダーです)。

図の変換変換を生成した 3 対 3 の行列には、次の値が含まれています。

|1  0  0| 
|0  1  0| 
|10 0  1|