Processing の transform(3) ~rotate 前編~
2010/06/24 21:40 - Processing
「Built with Processing[Ver. 1.x対応版] -デザイン/アートのためのプログラミング入門」を読んで、Processing の transform 系メソッドにすっげー違和感を感じたので、それらのメソッドについていろいろ考えるシリーズ、今回は書籍(P93~)に掲載されているサンプルコードを題材に rotate について見てみます。

掲載されているサンプルコードの実行結果は左図のようになります。 で、そのコードのうち、正方形エレメントの配置にかかわる部分は以下のようになってました。
まず最初に初期移動としてX軸方向に120ピクセル、Y軸方向に30ピクセル移動します(4行目、結果は赤い正方形)。
それ以降はループ処理。30度回転させ、その回転が反映した状態で、X軸方向に40ピクセル移動ということを繰り返します。 結果、正方形が30度ずつ傾きながら、円周上に並ぶというものになります。
じゃあこれを ActionScript に移植するとどうなるのか、というのを考えてみましょう。
前回は平行移動だけでしたが、今回はそれに回転が加わっています。 Matrix に何らかの処理を施す場合、同じ値でも適用する順番を入れ替えると、結果は全然違ってくることを忘れないように!
それを踏まえると、以下のようなコードになると思います。
15行目と18行目が超ウザいですね!
しかも Processing では回転、平行移動の順番でしたが、ActionScript では平行移動、回転の順(16、17行目)です。
まぁコンテナ作ってそれの座標を (120, 30) に移動して、各正方形はそのコンテナの子 DispalayObject とするやり方にすれば、15、18行目はなくせるし、Matrix への適用順は Processing と同じく回転、平行移動の順にできますが、それだとちょっと今チャレンジしていることの趣旨とは異なってくるので、それは却下としたい。
とは言え、これはウザいウザすぎる。
これはひとえに Matrix が行列であることが原因。 行列の乗算は交換法則が成り立たない、という数学的性質がありますからね。
あれ、でも待てよ。Matrix ではできなかったけど、Matrix3D なら行列の乗算の順番をユーザが選ぶことができたよなぁ……
そこで取り出したるは「ActionScript 3.0による三次元表現ガイドブック」!
続く。