HTML5テクニカルノート EaselJS 0.6.1のMatrix2Dクラスの基本的なメソッドと行列演算
EaselJSライブラリのMatrxi2Dクラスによる座標変換は、おもに変換行列の乗算で表されます。そこで、Matrix2Dクラスの基本的なメソッドについて、その行列演算をご紹介します。
Matrix2Dクラスが扱う2次元平面の変換行列は、つぎのような3行×3列の正方行列で表されます。ただし、第3行目の成分は定数([0 0 1])なので、実質の計算は6成分で行われます。
行列による2次元空間の座標変換の計算はおもに乗算です。そして、Matrix2Dクラスの基本的なメソッドについて、それぞれの行列演算を示したのが上の表です。「X」は乗算記号と見ても、任意の3次正方(3行×3列)行列のXと捉えても差支えありません。 気をつけていただきたいのは、行列の乗算には交換法則が成立たないことです。つまり、同じ行列を左から掛けるか、右から掛けるかによって、変換の結果はことなります。そのため、メソッドの定める行列を先に(左から)掛けるMatrix2D.prepend()と、後に(右から)掛けるMatrix2D.append()のメソッドが別に備わっています。なお、行列の乗算のやり方については「変換行列を数学的に捉える」2.「行列の乗算」をお読みください。 改めて前掲のメソッドの行列演算を確かめると、メソッドそのものが行列を右から乗じる役割のMatrix2D.append()を別にすると、Matrix2D.skew()だけ行列を右から掛けていることが気になります。おそらく、パラメータ(引数)と変換結果のわかりやすさなどから決められた仕様だと推測されます。 けれど、実装としては成分bとcで傾斜の変換行列を定めることもできます[*1]。この場合、成分bとcにそれぞれ垂直と水平の傾斜率を与え、変換行列は左から乗じることになります。成分aとdはそれぞれ水平と垂直の伸縮率(前掲Matrix2D.scale()メソッド参照)ですので、4成分の役割がきれいに分かれます。伸縮は実寸(1.0)のままであれば、傾斜の行列演算はつぎのように表されます。なお、角度にもとづいて傾斜率を定めるときは、tan値を与えます。
Matrix2Dクラスでも、成分値をそれぞれ求めて行列変換することはできます。単純な変形にとどまらず、伸縮や傾斜を組合わせるような場合には、統一的に計算できるので扱いやすいでしょう。具体的な例については、「EaselJSのMatrix2Dクラスを使ったインスタンスの変形」をお読みください。
作成者: 野中文雄 Copyright © 2001-2013 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||