サイトトップ

Director Flash 書籍 業務内容 プロフィール

Adobe Flash非公式テクニカルノート

Matrix3D.rawDataプロパティ

ID: FN1004001 Platform: All Version: CS4/ActionScript 3.0 Runtime: Flash Player 10/AIR 1.5

Matrix3Dクラス
パッケージ flash.geom
継承 Matrix3D → Object
rawDataプロパティ
文法 rawData:Vector.<Number>
プロパティ値 Matrix3Dインスタンスが表す4次正方行列の16成分値をもつ数値(Number)ベース型のVectorオブジェクト。16の成分値は、正方行列の第1列から第4列まで、列順に納められる。
実装 public function get rawData():Vector.<Number>
public function set rawData(value:Vector.<Number>):void

説明
Matrix3D.rawDataプロパティは、Matrix3Dインスタンスの表す4次正方行列の16成分値を、数値ベース型のVectorオブジェクトでもちます。ただし、数値エレメントの順序に注意しなければなりません。たとえば、Matrix3Dインスタンスがつぎのような4次正方行列を表すとします。

a11 a12 a13 a14
a21 a22 a23 a24
a31 a32 a33 a34
a41 a42 a43 a44

すると、Matrix3D.rawDataプロパティのVectorオブジェクトには、数値エレメントがつぎのような列ごとの順序で納められるのです[*1]

a11, a21, a31, a41, a12, a22, a32, a42, a13, a23, a33, a43, a14, a24, a34, a44

Matrix3Dインスタンスが表す4次正方行列の成分を列でなく行の順で示したいときは、Matrix3D.transpose()メソッドで転置すればよいでしょう。もとのMatrix3Dインスタンスをそのまま残すには、Matrix3D.clone()メソッドで複製をとっておきます。

var myMatrix3D:Matrix3D = new Matrix3D();
myMatrix3D.appendTranslation(1, 2, 3);
var outputMatrix3D:Matrix3D = myMatrix3D.clone();
outputMatrix3D.transpose();
trace(outputMatrix3D.rawData);   // 出力: 1,0,0,1,0,1,0,2,0,0,1,3,0,0,0,1

rawDataプロパティに特異行列が設定されると、例外がスローされます。特異行列とは、逆行列をもたない正方行列のことです。逆行列をもつ正方行列は、正則行列(regular matrix)または可逆行列(invertible matrix)と呼ばれます(Wikipedia「正則行列」参照)。

[*1] [ヘルプ]で[Matrix3D]クラスの「rawDataプロパティ」の説明を見ると、行列の「4つのエレメントごとに4×4マトリックスの1行または1列になります」とあります。しかし、本文に述べたとおり、Vectorオブジェクトの数値エレメントは、4次正方行列から4つずつ行ではなく列の順で納めます。

なお、かつてFlash Professional CS5の英文オンラインヘルプの[Matrix3D]のページには、AdobeのJoe ... Ward氏から行列の値は列ごとにVectorエレメントとして納められる("the rawData Vector stores elements column-by-column")旨のCommentが加えられていました。しかし、最新のドキュメントでも修正されていません。

参考
[ActionScript 3.0言語およびコンポーネントリファレンス] > [Matrix3D]「rawDataプロパティ


作成者: 野中文雄
更新日: 2011年10月6日 リンク先を更新。
作成日: 2010年4月1日 英語原文の翻訳に注釈を加えたFN1003001に全面改訂。


Copyright © 2001-2010 Fumio Nonaka.  All rights reserved.