com.nttdocomo.opt.ui.j3d
クラス AffineTrans

Object
  |
  +--com.nttdocomo.opt.ui.j3d.AffineTrans

public class AffineTrans
extends Object

3次元アフィン変換用の行列を扱うクラスを定義します。
このクラスのインスタンスをGraphics3D.setViewTrans(AffineTrans) にて設定することにより、 物体の回転や、視点変換行列の初期化を行うことができます。 なお、このクラスには、 移動や拡大/縮小をサポートするメソッドは陽に定義されていません。 これらの操作の代替手段として、 以下のスクリーン変換メソッドを使うことが想定されています。

この行列の各要素は、1.0を4096とする、32bit符号付き固定小数点数です。
各種の計算を行った際に、値がintの範囲を超えてオーバーフローが発生した場合の結果は機種依存です。

端末によってサポートされていない場合があります。未サポートの場合、 メソッドが呼び出された時点でUnsupportedOperationExceptionを発生します。

導入されたバージョン:
DoJa-2.0

フィールドの概要
 int m00
          1 行 1 列の要素です。
 int m01
          1 行 2 列の要素です。
 int m02
          1 行 3 列の要素です。
 int m03
          1 行 4 列の要素です。
 int m10
          2 行 1 列の要素です。
 int m11
          2 行 2 列の要素です。
 int m12
          2 行 3 列の要素です。
 int m13
          2 行 4 列の要素です。
 int m20
          3 行 1 列の要素です。
 int m21
          3 行 2 列の要素です。
 int m22
          3 行 3 列の要素です。
 int m23
          3 行 4 列の要素です。
 
コンストラクタの概要
AffineTrans()
          空の行列を生成します。
AffineTrans(int a00, int a01, int a02, int a03, int a10, int a11, int a12, int a13, int a20, int a21, int a22, int a23)
          要素を指定して行列を生成します。
 
メソッドの概要
 void lookAt(Vector3D position, Vector3D look, Vector3D up)
          視点座標への変換となるように行列の要素を設定します。
 void mul(AffineTrans t)
          変換行列の積 (this × t) を計算して、結果をこのオブジェクトに設定します。
 void mul(AffineTrans t1, AffineTrans t2)
          変換行列の積 (t1 × t2) を計算して、結果をこのオブジェクトに設定します。
 void setColumn(int column, int x, int y, int z)
          この行列の指定された列の要素を設定します。
 void setElement(int row, int column, int value)
          この行列の指定された要素を設定します。
 void setElement(int a00, int a01, int a02, int a03, int a10, int a11, int a12, int a13, int a20, int a21, int a22, int a23)
          行列の要素を設定します。
 void setIdentity()
          恒等変換となるように行列の要素を設定します。
 void setRotateV(Vector3D v, int a)
          右手系の座標系において、 指定されたベクトル中心の回転変換となるように行列の要素を設定します。
 void setRotateX(int a)
          右手系の座標系において、 x軸中心の回転変換となるように行列の要素を設定します。
 void setRotateY(int a)
          右手系の座標系において、 y軸中心の回転変換となるように行列の要素を設定します。
 void setRotateZ(int a)
          右手系の座標系において、 z軸中心の回転変換となるように行列の要素を設定します。
 void setRow(int row, int x, int y, int z, int w)
          この行列の指定された行の要素を設定します。
 void transform(Vector3D v, Vector3D result)
          点の座標を表すベクトルを、この変換行列で変換して、 結果を別のベクトルに格納します。
 
クラス Object から継承したメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

フィールドの詳細

m00

public int m00
1 行 1 列の要素です。


m01

public int m01
1 行 2 列の要素です。


m02

public int m02
1 行 3 列の要素です。


m03

public int m03
1 行 4 列の要素です。


m10

public int m10
2 行 1 列の要素です。


m11

public int m11
2 行 2 列の要素です。


m12

public int m12
2 行 3 列の要素です。


m13

public int m13
2 行 4 列の要素です。


m20

public int m20
3 行 1 列の要素です。


m21

public int m21
3 行 2 列の要素です。


m22

public int m22
3 行 3 列の要素です。


m23

public int m23
3 行 4 列の要素です。

コンストラクタの詳細

AffineTrans

public AffineTrans()
空の行列を生成します。 要素は全て 0 に設定されます。


AffineTrans

public AffineTrans(int a00,
                   int a01,
                   int a02,
                   int a03,
                   int a10,
                   int a11,
                   int a12,
                   int a13,
                   int a20,
                   int a21,
                   int a22,
                   int a23)
要素を指定して行列を生成します。

パラメータ:
a00 - 1 行 1 列の要素を指定します。
a01 - 1 行 2 列の要素を指定します。
a02 - 1 行 3 列の要素を指定します。
a03 - 1 行 4 列の要素を指定します。
a10 - 2 行 1 列の要素を指定します。
a11 - 2 行 2 列の要素を指定します。
a12 - 2 行 3 列の要素を指定します。
a13 - 2 行 4 列の要素を指定します。
a20 - 3 行 1 列の要素を指定します。
a21 - 3 行 2 列の要素を指定します。
a22 - 3 行 3 列の要素を指定します。
a23 - 3 行 4 列の要素を指定します。
メソッドの詳細

setElement

public void setElement(int row,
                       int column,
                       int value)
この行列の指定された要素を設定します。

パラメータ:
row - 要素を設定する、0から始まる行番号を指定します。
column - 要素を設定する、0から始まる列番号を指定します。
value - 第(row + 1)行第(column + 1)列に設定する値を指定します。
例外:
ArrayIndexOutOfBoundsException - row や column が範囲外の値の場合に発生します。

setElement

public void setElement(int a00,
                       int a01,
                       int a02,
                       int a03,
                       int a10,
                       int a11,
                       int a12,
                       int a13,
                       int a20,
                       int a21,
                       int a22,
                       int a23)
行列の要素を設定します。

パラメータ:
a00 - 1 行 1 列の要素を指定します。
a01 - 1 行 2 列の要素を指定します。
a02 - 1 行 3 列の要素を指定します。
a03 - 1 行 4 列の要素を指定します。
a10 - 2 行 1 列の要素を指定します。
a11 - 2 行 2 列の要素を指定します。
a12 - 2 行 3 列の要素を指定します。
a13 - 2 行 4 列の要素を指定します。
a20 - 3 行 1 列の要素を指定します。
a21 - 3 行 2 列の要素を指定します。
a22 - 3 行 3 列の要素を指定します。
a23 - 3 行 4 列の要素を指定します。

setRow

public void setRow(int row,
                   int x,
                   int y,
                   int z,
                   int w)
この行列の指定された行の要素を設定します。

パラメータ:
row - 要素を設定する、0から始まる行番号を指定します。
x - 指定された行の第1列に設定する値を指定します。
y - 指定された行の第2列に設定する値を指定します。
z - 指定された行の第3列に設定する値を指定します。
w - 指定された行の第4列に設定する値を指定します。
例外:
ArrayIndexOutOfBoundsException - row に 0 から 2 以外の値が指定された時に発生します。

setColumn

public void setColumn(int column,
                      int x,
                      int y,
                      int z)
この行列の指定された列の要素を設定します。

パラメータ:
column - 要素を設定する、0から始まる列番号を指定します。
x - 指定された列の第1行に設定する値を指定します。
y - 指定された列の第2行に設定する値を指定します。
z - 指定された列の第3行に設定する値を指定します。
例外:
ArrayIndexOutOfBoundsException - column に 0 から 3 以外の値が指定された時に発生します。

setIdentity

public void setIdentity()
恒等変換となるように行列の要素を設定します。 setElement(4096, 0, 0, 0, 0, 4096, 0, 0, 0, 0, 4096, 0) を呼び出したのと同じになります。


mul

public void mul(AffineTrans t)
変換行列の積 (this × t) を計算して、結果をこのオブジェクトに設定します。 mul(this, t) を呼び出したのと同じになります。
thisとtが同一オブジェクトを指している場合にも、 正しく計算が行われます。

パラメータ:
t - 乗数となる変換行列を指定します。
例外:
NullPointerException - 引数 t に null が指定された場合に発生します。

mul

public void mul(AffineTrans t1,
                AffineTrans t2)
変換行列の積 (t1 × t2) を計算して、結果をこのオブジェクトに設定します。 具体的には以下のような計算を行います。
 int a00 = ((t1.m00 * t2.m00 + t1.m01 * t2.m10 + t1.m02 * t2.m20 + 2048) >> 12);
 int a01 = ((t1.m00 * t2.m01 + t1.m01 * t2.m11 + t1.m02 * t2.m21 + 2048) >> 12);
 int a02 = ((t1.m00 * t2.m02 + t1.m01 * t2.m12 + t1.m02 * t2.m22 + 2048) >> 12);
 int a03 = ((t1.m00 * t2.m03 + t1.m01 * t2.m13 + t1.m02 * t2.m23 + 2048) >> 12) + t1.m03;
 int a10 = ((t1.m10 * t2.m00 + t1.m11 * t2.m10 + t1.m12 * t2.m20 + 2048) >> 12);
 int a11 = ((t1.m10 * t2.m01 + t1.m11 * t2.m11 + t1.m12 * t2.m21 + 2048) >> 12);
 int a12 = ((t1.m10 * t2.m02 + t1.m11 * t2.m12 + t1.m12 * t2.m22 + 2048) >> 12);
 int a13 = ((t1.m10 * t2.m03 + t1.m11 * t2.m13 + t1.m12 * t2.m23 + 2048) >> 12) + t1.m13;
 int a20 = ((t1.m20 * t2.m00 + t1.m21 * t2.m10 + t1.m22 * t2.m20 + 2048) >> 12);
 int a21 = ((t1.m20 * t2.m01 + t1.m21 * t2.m11 + t1.m22 * t2.m21 + 2048) >> 12);
 int a22 = ((t1.m20 * t2.m02 + t1.m21 * t2.m12 + t1.m22 * t2.m22 + 2048) >> 12);
 int a23 = ((t1.m20 * t2.m03 + t1.m21 * t2.m13 + t1.m22 * t2.m23 + 2048) >> 12) + t1.m23;
 this.m00 = a00;
 this.m01 = a01;
 this.m02 = a02;
 this.m03 = a03;
 this.m10 = a10;
 this.m11 = a11;
 this.m12 = a12;
 this.m13 = a13;
 this.m20 = a20;
 this.m21 = a21;
 this.m22 = a22;
 this.m23 = a23;
 

パラメータ:
t1 - 被乗数となる変換行列を指定します。
t2 - 乗数となる変換行列を指定します。
例外:
NullPointerException - 引数 t1 または t2 に null が指定された場合に発生します。

setRotateX

public void setRotateX(int a)
右手系の座標系において、 x軸中心の回転変換となるように行列の要素を設定します。 回転方向は、x軸の正の方向から見た場合に反時計回り (y軸とz軸がなす角の小さい方を通って、y軸からz軸へ向かう方向)です。 なお、第4列は変更されません。

パラメータ:
a - 角度を4096 分円単位(2πラジアンで 4096)で指定します。

setRotateY

public void setRotateY(int a)
右手系の座標系において、 y軸中心の回転変換となるように行列の要素を設定します。 回転方向は、y軸の正の方向から見た場合に反時計回り (z軸とx軸がなす角の小さい方を通って、z軸からx軸へ向かう方向)です。 なお、第4列は変更されません。

パラメータ:
a - 角度を4096 分円単位(2πラジアンで 4096)で指定します。

setRotateZ

public void setRotateZ(int a)
右手系の座標系において、 z軸中心の回転変換となるように行列の要素を設定します。 回転方向は、z軸の正の方向から見た場合に反時計回り (x軸とy軸がなす角の小さい方を通って、x軸からy軸へ向かう方向)です。 なお、第4列は変更されません。

パラメータ:
a - 角度を4096 分円単位(2πラジアンで 4096)で指定します。

setRotateV

public void setRotateV(Vector3D v,
                       int a)
右手系の座標系において、 指定されたベクトル中心の回転変換となるように行列の要素を設定します。 回転方向は、ベクトルの方向から見た場合に反時計回りです。 なお、第4列は変更されません。

パラメータ:
v - 回転の中心となるベクトルを指定します。 単位ベクトルである必要はありません。
a - 角度を4096 分円単位(2πラジアンで 4096)で指定します。
例外:
NullPointerException - 引数 v に null が指定された場合に発生します。

lookAt

public void lookAt(Vector3D position,
                   Vector3D look,
                   Vector3D up)
視点座標への変換となるように行列の要素を設定します。 視点位置、参照点、Upベクトルを指定することで、 視点座標への変換を表す変換行列を設定します。
視線方向とUpベクトルが垂直でない場合は、 視線方向と垂直になるようにUpベクトルが修正された上で、 変換行列が設定されます。
視点座標系は、 視点位置を原点とし、視線方向を+z方向とする右手系となります。

パラメータ:
position - 視点への位置ベクトルを指定します。
look - 参照点への位置ベクトルを指定します。
up - Upベクトルを指定します。
例外:
NullPointerException - 引数 position、look、または up に null が指定された場合に発生します。
IllegalArgumentException - 引数 up が零ベクトルの場合に発生します。
IllegalArgumentException - 引数 look と position が等しい場合、 引数 (look - position) と up が平行な場合に発生します。

transform

public void transform(Vector3D v,
                      Vector3D result)
点の座標を表すベクトルを、この変換行列で変換して、 結果を別のベクトルに格納します。 なお、 引数vとresultが同一オブジェクトを参照している場合でも、 正しく計算がなされます。

パラメータ:
v - 点の座標を表すベクトルを指定します。
result - 変換結果を格納するベクトルを指定します。
例外:
NullPointerException - 引数 v または result に null が指定された場合に発生します。


NTT DoCoMo,Inc.

本製品または文書は著作権法により保護されており、その使用、複製、再頒布および逆コンパイルを制限するライセンスのもとにおいて頒布されます。NTTドコモ(その他に許諾者がある場合は当該許諾者も含めて)の書面による事前の許可なく、本製品および関連する文書のいかなる部分も、いかなる方法によっても複製することが禁じられます。フォントを含む第三者のソフトウェアは、著作権法により保護されており、その提供者からライセンスを受けているものです。

Sun、Sun Microsystems、Java、J2MEおよびJ2SEは、米国およびその他の国における米国 Sun Microsystems,Inc.の商標または登録商標です。サンのロゴマークは、米国 Sun Microsystems, Inc.の登録商標です。

「iモード」、「iアプリ/アイアプリ」、「i-αppli」ロゴ、「DoJa」はNTTドコモの商標または登録商標です。