[AS3] 間違いだらけ(?)のMatrix3Dクラスのドキュメント [Edit]

間違いだらけというかは別にして、Matrix3Dクラスのドキュメントには誤っている のかどうかもわかりにくい説明が少なくありません。内容を正しく理解するには、ActionScriptだけでなく、数学の知識も必要になるからです。さらに、日本語訳の問題がややこしさを増します。

Matrix3D

まず、[ヘルプ]に載っているMatrix3Dオブジェクトの変換行列を表す上図です。[Matrix3D]のページ冒頭で、つぎのように説明されています。

マトリックスの最初の3行は3Dの各軸(x, y, z)のデータを保持します。平行移動情報は最後の列に格納されます。方向と拡大/縮小のデータは、最初の3列に格納されます。倍率は、最初の3列の対角線上の数値です。Matrix3Dエレメントは次のように表現されます。

「最初の3行」と書かれているのですから、「各軸(x, y, z)」は下図の位置に表記すべきでしょう。[ヘルプ]の上図が変換行列の列ばかり、にぎやかに飾り立てているのは妙です。なお、下の図は「方向と拡大/縮小のデータは、最初の3列に格納」されるという記述に合わせて、列の記載も変えました。

Matrix3D

つぎに、行列は数学における概念です。「反転されたマトリックス」は「逆行列」、「反転可能」は「可逆」という数学用語を使うべきでしょう(表001)。数学の文献を調べる場合にも困ります。

表001■行列についての[ヘルプ]の記載と数学用語
[ヘルプ]の記載 数学用語
「マトリックス」 「行列」
「反転されたマトリックス」 「逆行列」
「反転可能」 「可逆」

さらに、Matrix3D.rawDataプロパティがわかりにくいです。値はNumberベース型のVectorオブジェクトです。つまり、行列を1本の数値の並びに置換えます。すると、数値の順は行ごとなのか列ごとなのかが問題です。[ヘルプ]は「1行または1列」と訳がわからない説明をします。

実際には、列を単位としてVectorオブジェクトの数値エレメントは並べられます。Matrix3D()コンストラクタの引数に渡せるVectorオブジェクトも同じです。ただ、数学で行列を扱うときは、行を先に示すのが普通です(「変換行列を数学的に捉える」注[*4]参照)。各数値に添字を使うときも行の番号が先です。HTMLの<table>やExcelのワークシートでもそうですね。

行列の順番が微妙に気持ち悪いと思っていたら、Flash Player 11で新たに加わったMatrix3D.copyRawDataFrom()/copyRawDataTo()メソッドには、行列入替えの引数が備わりました。同じ違和感を覚えた人は、プロパティではなくこれらのメソッドを使えばよいでしょう。

コメント

この記事にコメントを書く

記事に対するテクニカルな質問はご遠慮ください(利用規約)。

その他の記事