|
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.
|