言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

点を回転させる

二日も悩んだわりに、結論としては難しくも意外でも無い事に時間を潰してしまったが、とにかく回転は分かったので書く。やりたい事は、ある点を原点の回りで好きな角度だけ回した時に、回った後の座標が知りたいという単純な事だ。

角度を表現するのにはベクトルを使う。簡単に言うと、タテとヨコの比率で角度を表すという事で、道路の標識にあるの登り勾配なんかと考え方は同じだ。計算を簡単にするために、長さが一の単位ベクトルを使う。

で、求め方はこんな感じ。点 P が (Rx, Ry) で現される角度だけ回転した点 Q を求めたい。話を簡単にするために、点 P は半径 1 の円周上にあるという事にする。

まず、求めたい Q の x 座標だが、これは、

OE : OD = OA : OP
OE : Rx = Px : 1
        = RxPx

QC : QD = PA : PO
QC : Ry = Py : 1
QC      = RyPy

Qx = BQ = OE - QC = RxPx - RyPy

y 座標は、

CD : QD = AO : PO
CD : Ry = Px : 1
CD      = RyPx

DE : DO = PA : PO
DE : Rx = Py : 1
DE      = RxPy

Qy = CD + DE = RyPx + RxPy

という事で、めでたく

  • Qx = RxPx - RyPy
  • Qy = RyPx + RxPy

が求まった。この証明は全然厳密な物では無いけど、図形の雰囲気から、x 要素と y 要素をどんな風に掛けるのか、マイナスはどこに付けるのかが伝わってくると思う。

次は変換の合成と行列、複素数の乗法をやるかな。。。