「Direct2D」の編集履歴(バックアップ)一覧に戻る

Direct2D - (2012/07/07 (土) 15:36:08) のソース

・Direct2D
 DirectXのDirect2Dでは、[[アフィン変換]](線形変換)がサポートされている。
 座標(X,Y)に対して、変換行列を乗算して、アフィン変換を行う。
----
・アフィン変換
 P・M=P'
 現在の座標Pに変換行列Mを乗算して、線形変換後の座標P'を作成する。

①オブジェクトの変換前の各座標:1行×3列
 P[X Y 1]
②変換行列:3行×2列
  ┌M11(初期値:1) M12(初期値:0)┐
 M│M21(初期値:0) M32(初期値:1)│
  └M31(初期値:0) M33(初期値:0)┘
③オブジェクトの変換後の各座標:1行×2列
 P'[X' Y']

 X'=X×M11+Y×M21+1×M31(初期値:X×1+Y×0+1×0 =X)
 Y'=X×M12+Y×M22+1×M32(初期値:X×0+Y×1+1×0 =Y)
----
・回転:Rotate
 指定した角度と中心点を持つ回転 変換

 Matrix3x2F Rotation(
  FLOAT angle,
  D2D1_POINT_2F centerPoint
 );

 angle:回転角度(度単位,正の角度の場合は時計回り,負の角度の場合は反時計回り)
 centerPoint:回転の中心点
  x:中心点のX座標
  y:中心点のY座標
----
・拡大/縮小:Scale
 指定したX軸方向およびY軸方向の拡大/縮小率と中心点を持つ拡大/縮小 変換

 Matrix3x2F Scale(
  D2D1_SIZE_F size,
   FLOAT width,
   FLOAT height
  D2D1_POINT_2F centerPoint
   FLOAT x,
   FLOAT y
 );

 size:
  width:サイズの水平成分(幅)
  height:サイズの垂直成分(高さ)
 centerPoint:拡大/縮小の中心点
  x:中心点のX座標
  y:中心点のY座標
----
・傾斜:Skew
 指定したX軸値・Y軸値および中心点を持つ傾斜 変換

 Matrix3x2F Skew(
  FLOAT angleX,
  FLOAT angleY,
  D2D1_POINT_2F centerPoint
   FLOAT x,
   FLOAT y
 );

 angleX:X軸の傾斜角度(Y軸からの反時計回りの度単位)
 angleY:Y軸の傾斜角度(X軸からの反時計回りの度単位)
 centerPoint:傾斜の中心点
  x:中心点のX座標
  y:中心点のY座標
----
・平行移動:Translate
 指定したX軸方向およびY軸方向の変位を持つ移動 変換

 Matrix3x2F Translation(
  D2D1_SIZE_F size
   FLOAT x,
   FLOAT y
 );

 size
  x:X軸方向の変位
  y:Y軸方向の変位
----
[[画像変換]]
----