VB.NET2005 TIPS / グラフィックス系 |
G0201 図形の回転 |
最終更新:2006/11/12 再掲 |
●解説
VB6ではポリゴンを表すポイント集合体にアフィン変換を行い、APIで描画させるなどしていた。
.NETでは、Graphicsオブジェクトにて、アフィン変換などの行列変換の行列を持つことができ、それを座標系に適用できるようになっている。平行移動、拡大・縮小、回転などが自由にできる。
45度回転した楕円
●原理
Graphicsオブジェクトには座標のオブジェクトがあり、そのなかのMatrixオブジェクトは座標に関する行列変換を行う。Matrixに変換したい行列を登録し、座標に適用すると、その後のGraphicsへの描画は、その変換が施される。
●方法
回転では角度のほか、回転中心を制御できないといけない。このためには局所的な回転ができる、RotateAt()メソッドを利用する。名称から想像できるように、ある点を指定して、それを中心に回転させるものである。
●実例
gはGraphicsとする、
Dim p As New Pen(Color.Red,2)
Dim cmx As Matrix = g.Transform '現在の座標系の変換行列を保存する。(絶対必要)
Dim pmx As New Matrix()
'新しい行列を確保
Dim rp As New PointF(350, 250)
'回転中心をPointFで定義
g.ResetTransform()
'現在の座標系をリセットする
pmx.RotateAt(45, rp, Drawing2D.MatrixOrder.Append)
'新しい行列に45度回転の定義を追加
g.Transform = pmx
'座標系に行列を適用させる
g.DrawEllipse(p, New RectangleF(200, 200, 300, 100))
'楕円を中心で回転ざせる
p.Dispose()
pmx.Dispose()
g.Transform = cmx
'元の座標系に戻す(絶対必要)
|