学校の数学は「+−×÷」以外必要ない!っていうのは間違い!っていう数学シリーズ第2弾です。

今回は、一次変換と回転についてです。
FlashにはMatrix(数学でいう行列)というものがあります。
高校の時に行列ってならいましたよね?あれです。
うさこが高校の頃は行列の後に行列を使った一次変換というものまで習いましたが、その後教育課程が変わって、高校数学範囲からは外れました。
だから、今の20代で、文系に進んでいる人には少し酷かもしれません。

以下は「(」を2行にまたがるとして見てくださいね。
行列って、
( 1 2)
1 0
だったら2行2列の行列で、
(1)
0
だったら、2行1列の行列です。
かけ算をすることができて、
(a b)
c d

(x)
y
をかけると
(ax+by)
cx+dy
となります。

一次変換によって、座標の位置が動くんですね。
a,b,c,dに入る数値によって、さまざまな性質を持つ一次変換を作成できます。
特定の形の一次変換を利用して、図形を平行移動したり、変形したり、拡大したり、回転したりできるのです。
(FLASHの場合、3行3列の左上2行2列分がこれにあたります。)
詳しくはこのへんで
http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/geom/Matrix.html

これをふまえて回転を考えてみます。

実は、回転のための一次変換というのは、高校の教科書でも出てきました。
ただ、どうしてこれが回転なのかが解らなかったので、証明してみました。


一次変換

ピタゴラスの定理ってありますよね。
中学の範囲なので、さすがにみんな習っているはず。

直角三角形があったとき、一番長いところを斜めにおいたら
長辺の二乗 = 底辺の二乗 + 高さの二乗 (a^2 + b ^2 =c^2)(^2は二乗って意味)

ってものです。
これを使ってsinとcosを考える。

一次変換 2


x2についても同様に算出することができます(お暇な方チャレンジ!)



こんな感じで、回転の一次変換は理解できると思います。
平行移動や拡大縮小はもっとずっと簡単なので割愛。(リクエストあればやります)
FlashのリファレンスのMatrixクラスあたりをみると、どうやってに使うかが出てきます。
Matrixのrotate()でいちいち行列書かなくても利用でき、楽できます。

flashで使うならrotationでいいじゃないか、という人もいるかもしれませんが、FLASHの場合、原点中心にぐるぐるしちゃうので、rotationではたしか都合悪いことがあるんですね。


ここまで書いて気がついたけど、行列や一次変換の前に、サイン(sin)、コサイン(cos)について説明した方が良かったかもしれませんね。。

次回の「FLASHについて覚えておきたい数学」(があるとすれば)は、サインコサインをやりましょうか。

ブログランキング このエントリーをはてなブックマークに追加

カテゴリ:FLASH/FLEX/AIR