サイトトップ

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

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

Vector3Dクラス

ID: FN0905002 Product: Flash Platform: All Version: CS4/ActionScript 3.0

パッケージ flash.geom
クラス public class Vector3D
継承 Vector3D → Object

説明
Vector3Dクラスは、3次元ないしは4次元のベクトルを扱います[*1]。おもに、3次元座標空間の位置ベクトルを表し、その処理をするために用いられます。

3次元座標空間には、水平のx軸と垂直のy軸に、奥行きのz軸が加わります。3つの座標軸は、互いに直交します。このように直交する座標軸で定められる座標空間を、「直交座標系」または「デカルト座標系」と呼びます[*2]。そして、Flashの3次元座標空間は、z軸が奥に向かって正であり、右手座標系とされます[*3]

図001■Flash Player 10の3次元直交座標系

* [ヘルプ] > [ActionScript 3.0 言語およびコンポーネントリファレンス] > [Vector3D]より引用

Vector3Dクラスは3次元座標空間の位置だけでなく、3次元ないし4次元ベクトルで表せるものであれば、その値の保持や処理に利用できます。たとえば、3次元座標空間の位置でなく方向と大きさを表したり、RGBカラー値を3次元のRGBベクトルとして扱うことなどです。

Vector3Dクラスには3次元座標空間における位置ベクトル(x, y, z)の成分となるVector3D.xVector3D.yVector3D.zプロパティに加えて、4つめの成分としてVector3D.wプロパティがあります(表001)、つまり、Vector3Dインスタンスは4次元のベクトルです(図002)。そして、Vector3Dクラスには、インスタンスが表すベクトルに対して加減算やスカラー倍、内積・外積などを計算するメソッドが備わっています[*4]

表001■Vector3Dクラスのプロパティ
プロパティ 説明
x:Number 4次元ベクトルの第1成分です。3次元空間のx座標を表します。
y:Number 4次元ベクトルの第2成分です。3次元空間のy座標を表します。
z:Number 4次元ベクトルの第3成分です。3次元空間のz座標を表します。
w:Number 4次元ベクトルの第4成分です。オプションとして、焦点距離をもとに計算した3次元から2次元への透視投影変換比率や、四元数の実(スカラー)部の値を納めます。
length:Number [読取り専用] Vector3Dインスタンスの3次元ベクトル(Vector3D.x, Vector3D.y, Vector3D.z)の大きさ(絶対値)です。
lengthSquared:Number [読取り専用] Vector3Dインスタンスの3次元ベクトル(Vector3D.x, Vector3D.y, Vector3D.z)の大きさ(Vector3D.lehgthプロパティ値)の平方(2乗)です。

図002■Vector3Dインスタンスは4次元ベクトルを表す

* [ヘルプ] > [ActionScript 3.0 言語およびコンポーネントリファレンス] > [Vector3D]より引用

Vector3DインスタンスのVector3D.wプロパティには、透視投影の変換比率を入れることができます。透視投影とは、3次元空間の座標を遠近法が適用された2次元平面に描画することです。Vector3Dインスタンスに対してVector3D.project()メソッドを呼出すと、3次元ベクトルのVector3D.x, Vector3D.y, Vector3D.zプロパティの各値がVector3D.wプロパティに設定した変換比率で除算されます[*5]

Vector3Dインスタンスは、四元数(クォータニオン)を表すこともあります。Matrix3D.decompose()Matrix3D.recompose()メソッドに方向スタイルの引数として定数Orientation3D.QUATERNIONを指定すると、戻り値または引数のVectorインスタンスに納められる回転を設定するVector3Dインスタンスは四元数表現になります[*6]。四元数表現のVectorインスタンスは、3次元べクトルのVector3D.xおよびVector3D.yVector3D.zプロパティが四元数の虚(ベクター)部を、Vector3D.wプロパティはその実(スカラー)部を示します。

[*1] 3次元座標を変換する場合、その変換行列は4×4の正方行列とされ、それに合わせて位置ベクトルも4次元になります。

[*2] [ヘルプ]の[Vector3D]で、「Vector3Dクラスは、極座標x、y、および z を使用」すると説明しているのは、邦訳の誤りでしょう。英語の原文は"Cartesian coordinates"ですので、「デカルト座標」つまり直交座標を意味します。極座標は、位置を原点からの距離および軸と成す角度で表します。極座標について詳しくは、力学「極座標」をご参照ください。

[*3] 親指と人差し指、中指を互いに直角に立て、それぞれx軸y軸z軸と見た場合、各指先つまり正の方向が右手と左手のどちらに当たるかという区別です。Flashの3次元座標軸は、x軸が右、y軸は下、z軸が奥に向かって正になりますので、右手系といわれます。

[*4] 加減算やスカラー倍、内積・外積などを計算するVector3Dクラスのメソッドは、次表002のとおりです。これらのメソッドはVector3Dインスタンスを3次元ベクトルとして扱うので、演算の対象はVector3D.xおよびVector3D.yVector3D.zプロパティになります。各メソッドやその他のVector3Dクラスのメソッドについて詳しくは、[ヘルプ] > [Adobe Flash Professional CS5用ActionScript 3.0リファレンスガイド] > [Vector3D]をご覧ください。

表002■Vector3Dクラスのベクトル演算のメソッド(一部)
プロパティ 説明
add(secondVector:Vector3D):Vector3D 3次元ベクトルが加算されたVector3Dインスタンスを返します。
subtract(secondVector:Vector3D):Vector3D 3次元ベクトルが減算されたVector3Dインスタンスを返します。
scaleBy(scale:Number):void 3次元ベクトルをスカラー倍します。
dotProduct(secondVector:Vector3D):Number 3次元ベクトルとの内積値を返します。
crossProduct(secondVector:Vector3D):Vector3D 3次元ベクトルとの外積値となるVector3Dインスタンスを返します。

[*5] 透視投影の変換比率は、視点から投影面までの焦点距離と投影面からのz方向の位置によって、つぎのように計算されます(図003)。

投影像の大きさ = オリジナルの大きさ×焦点距離/(焦点距離 + z位置)

図003■焦点距離とz方向距離が投影像の大きさを決める

z方向の距離として座標値Vector3D.zプロパティ値を使うとすれば、Vector3D.wプロパティの値は3次元べクトルの各座標値を除算しますので、以下の式の値を設定します。なお、2次元平面への投影ですから、Vector3D.zプロパティの値は使いません。透視投影について詳しくは、てっく煮ブログ「AS3.0 で3Dプログラミングを1から勉強する(3) - 透視投影 -」をご参照ください。

Vector3D.wプロパティ = (焦点距離 + Vector3D.zプロパティ値)/焦点距離

[*6] 詳しくは、[ヘルプ]のMatrix3D.decompose()Matrix3D.recompose()メソッドの説明、および「四元数(クォータニオン)」のとくに「5. ActionScript 3.0で使われる四元数」をお読みください。

Player
ActionScript 3.0/Flash Player 10/AIR1.5以降。

参考
[ActionScript 3.0 Reference for the Adobe Flash Platform] > [Vector3D]
[Adobe Flash Professional CS5用ActionScript 3.0リファレンスガイド] > [Vector3D]


作成者: 野中文雄
更新日: 2011年2月28日 図003を修正。[ヘルプ]のリンクをFlash Professional CS5に変更した。
作成日: 2009年5月7日 英語原文の[ヘルプ]の邦訳に注釈を加えたFN0810002の同名ノートを全面的に改訂。オリジナルのドキュメントとした。


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