Windows API の GetGlyphOutline() を使って得るフォントのアウトラインを回転させる必要があり、 結局、7 番目の引数である「変換行列構造体: MAT2」に、
MAT2.eM11 = cos(θ)
MAT2.eM12 = -sin(θ)
MAT2.eM21 = sin(θ)
MAT2.eM22 = cos(θ)
※θ は角度を表すラジアン値として渡す。
を設定することで、回転したアウトライン座標を得られたのですが、何故これで回転するんだ?、という疑問がわいたので、
今更ながら、調べてみました。
高校時代にきちんと授業を聞いておられた方には、「そんなの自明だろう」、と笑われるかもしれませんが、、、(^^;)。
私にとって、一番わかりやすかったのが、ウィキブックスにあった、 高等学校数学II 加法定理の幾何的導出 です。これにより、
sin(α+β) = sinα・cosβ + cosα・sinβ
cos(α+β) = cosα・cosβ - sinα・sinβ
を手に入れました。
元の座標を (x1, y1)、回転後の座標を (x2, y2) とすると、座標の回転は以下の式で行うことができました。
x2 = x1・cosβ - y1・sinβ
y2 = x1・sinβ + y1・cosβ
また、上記を行列式で表すと、以下のようになります。
GetGlyphOutline() の引数に渡している値は、この行列式の各値でありました。
※解説の中で加法定理が使われています。
GetGlyphOutline() を使って回転させたフォントのアウトラインを取得、描画した例です。
なお、アウトラインを描画するコードは、
Article ID: 243285 - Last Review: February 12, 2007 - Revision: 1.5
How To Draw TrueType Glyph Outlines
から流用しました。
Rotate.zip (70.7 KB)