com.docomostar.ui.util3d
クラス Transform

Object
  上位を拡張 com.docomostar.ui.util3d.Transform

public class Transform
extends Object
 [iアプリオプションAPI]

浮動小数による三次元アフィン変換用の行列データを保持する、 変換行列クラスを定義します。 行列の内容は、 4x4 の 16 個の float 型の値です。

メソッド set(float[]) set(int, float) get(int) get(float[]) を利用時に考慮する必要がある、要素のインデックス番号と、 実際の行列の要素との関係は、以下のようになります。

          第 1  2  3  4 列
   -----------------------    
   第 1 行 [ 0  1  2  3]
   第 2 行 [ 4  5  6  7]
   第 3 行 [ 8  9 10 11]
   第 4 行 [12 13 14 15]
   -----------------------    
 

以下のメソッドによって

設定された float 値は、なんらかの演算が行われるまでの間、 その内容はまったく変わらずに保持されます。 具体的には、例えば set(0, x) メソッドによって値 x を設定した直後に、 get(0) メソッドによって取得した値 a を比較するとします。 このとき、 x==a は常に真です。

導入されたバージョン:
Star-1.0
関連項目:
数値演算に関する共通の定義

コンストラクタの概要
Transform()
           変換行列オブジェクトを生成します。
Transform(Transform transform)
           任意の変換行列オブジェクトの内容を完全に複製することで、 新規に変換行列オブジェクトを生成します。
 
メソッドの概要
 void get(float[] matrix)
           変換行列の内容を、実数の配列に設定させることで取得します。
 float get(int index)
           変換行列の要素を一つ取得します。
 void invert()
           変換行列の逆行列を計算して、結果を格納します。
 void lookAt(Vector3D position, Vector3D look, Vector3D up)
           視点座標への変換となるように行列の要素を設定します。
 void multiply(Transform transform)
           変換行列の乗算を行い、結果をこのオブジェクトに設定します。
 void rotate(float x, float y, float z, float angle)
           変換行列の乗算(任意の方向ベクトルに対する回転)を行い、 結果をこのオブジェクトに設定します。
 void rotate(Vector3D v, float angle)
           変換行列の乗算(任意の方向ベクトルに対する回転)を行い、 結果をこのオブジェクトに設定します。
 void rotateQuat(float x, float y, float z, float w)
           変換行列の乗算を行い(四元数による回転)、 結果をこのオブジェクトに設定します。
 void rotateQuat(Vector3D v, float w)
           変換行列の乗算を行い(四元数による回転)、 結果をこのオブジェクトに設定します。
 void scale(float x, float y, float z)
           変換行列の乗算(拡大/縮小)を行い、結果をこのオブジェクトに設定します。
 void scale(Vector3D v)
           変換行列の乗算(拡大/縮小)を行い、結果をこのオブジェクトに設定します。
 void set(float[] matrix)
           実数の配列の内容を用いて、変換行列を再設定します。
 void set(int index, float value)
           変換行列の要素を一つ設定します。
 void set(Transform transform)
           任意の変換行列オブジェクトの内容を完全に複製することで、 この変換行列オブジェクトの内容を再設定します。
 void setIdentity()
           行列の内容を恒等変換の状態、つまり [1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1] にします。
 void translate(float x, float y, float z)
           変換行列の乗算を行い(平行移動)、 結果をこのオブジェクトに設定します。
 void translate(Vector3D v)
           変換行列の乗算を行い(平行移動)、 結果をこのオブジェクトに設定します。
 void transpose()
           変換行列の転置行列を算出して、結果をこのオブジェクトに設定します。
 void transVector(Vector3D v, Vector3D result)
           点の座標を表すベクトルを、この変換行列で変換して、 結果を別のベクトルに格納します。
 
クラス Object から継承されたメソッド
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

Transform

public Transform()

変換行列オブジェクトを生成します。

内容は恒等変換の状態、つまり [1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1] になります。


Transform

public Transform(Transform transform)

任意の変換行列オブジェクトの内容を完全に複製することで、 新規に変換行列オブジェクトを生成します。

パラメータ:
transform - 変換行列オブジェクトを指定します。
例外:
NullPointerException -
引数 transform が null の場合に発生します。
メソッドの詳細

setIdentity

public void setIdentity()

行列の内容を恒等変換の状態、つまり [1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1] にします。


set

public void set(Transform transform)

任意の変換行列オブジェクトの内容を完全に複製することで、 この変換行列オブジェクトの内容を再設定します。

パラメータ:
transform - 変換行列オブジェクトを指定します。
例外:
NullPointerException -
引数 transform が null の場合に発生します。

set

public void set(float[] matrix)

実数の配列の内容を用いて、変換行列を再設定します。

パラメータ:
matrix - 実数の配列を指定します。長さが 16 以上なことが必要です。 長さが 17 以上のとき、 17個目以降の要素の内容は無視されます。
例外:
NullPointerException -
引数 matrix が null の場合に発生します。
IllegalArgumentException -
引数 matrix の長さが 16 未満の場合に発生します。
IllegalArgumentException -
引数 matrix の 16個の 要素のいずれかに、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合に発生します。 17個目以降の内容は検査されません。

get

public void get(float[] matrix)

変換行列の内容を、実数の配列に設定させることで取得します。

パラメータ:
matrix - 実数群を設定させたい配列を指定します。 長さが 16 以上なことが必要です。 長さが 17 以上のとき、 17個目以降の要素の内容は変更されません。
例外:
NullPointerException -
引数 matrix が null の場合に発生します。
IllegalArgumentException -
引数 matrix の長さが 16 未満の場合に発生します。

set

public void set(int index,
                float value)

変換行列の要素を一つ設定します。

パラメータ:
index - 要素の番号を指定します。 0 から 15 の範囲で指定します。
value - 要素の値を指定します。
例外:
IllegalArgumentException -
引数 index が 0 未満あるいは 16 以上のとき。
IllegalArgumentException -
引数 value に、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合に発生します。

get

public float get(int index)

変換行列の要素を一つ取得します。

パラメータ:
index - 要素の番号を指定します。 0 から 15 の範囲で指定します。
戻り値:
指定された要素の値を返します。
例外:
IllegalArgumentException -
引数 index が 0 未満あるいは 16 以上のとき。

invert

public void invert()

変換行列の逆行列を計算して、結果を格納します。

例外:
ArithmeticException -
逆行列が計算できない場合に発生します。

transpose

public void transpose()

変換行列の転置行列を算出して、結果をこのオブジェクトに設定します。


multiply

public void multiply(Transform transform)

変換行列の乗算を行い、結果をこのオブジェクトに設定します。

具体的には this = this x transform を行います。

引数に this を渡したときにも、正常に演算が行われます。

パラメータ:
transform - 変換行列オブジェクトを指定します。
例外:
NullPointerException -
引数 transform が null の場合に発生します。

scale

public void scale(float x,
                  float y,
                  float z)

変換行列の乗算(拡大/縮小)を行い、結果をこのオブジェクトに設定します。

具体的には this = this x S を行います。Sの内容は

    x   0   0   0
    0   y   0   0
    0   0   z   0
    0   0   0   1
 
です。

パラメータ:
x - 値 x を指定します。
y - 値 y を指定します。
z - 値 z を指定します。
例外:
IllegalArgumentException -
引数 x,y,z のいずれかに、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合に発生します。

scale

public void scale(Vector3D v)

変換行列の乗算(拡大/縮小)を行い、結果をこのオブジェクトに設定します。

scale(v.getX(), v.getY(), v.getZ()) を呼び出したのと同じ結果になります。

パラメータ:
v - ベクトルオブジェクトを指定します。
例外:
NullPointerException -
引数 v が null の場合に発生します。

rotate

public void rotate(float x,
                   float y,
                   float z,
                   float angle)

変換行列の乗算(任意の方向ベクトルに対する回転)を行い、 結果をこのオブジェクトに設定します。

具体的には this = this x R を行います。Rの内容は

    xx(1-c)+c    xy(1-c)-zs   xz(1-c)+ys   0
    yx(1-c)+zs   yy(1-c)+c    yz(1-c)-xs   0
    xz(1-c)-ys   yz(1-c)+xs   zz(1-c)+c    0
         0            0            0       1
 
です。ただし c = cos(angle), s = sin(angle) です。 ベクトルの長さが 1 になるように 値 x, y, z は正規化された のちに、上記の行列が生成されて演算が行われます。

パラメータ:
x - 値 x を指定します。
y - 値 y を指定します。
z - 値 z を指定します。
angle - 回転角度 (degree) を指定します。
例外:
IllegalArgumentException -
引数 x,y,z,angle のいずれかに、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合に発生します。
IllegalArgumentException -
引数 angle が 0 ではなく、かつ、 引数 x,y,z がすべて 0 の場合に発生します。 また、これらの引数を int 幅の値に変換したときに、 この条件を満たす場合にも発生します。

rotate

public void rotate(Vector3D v,
                   float angle)

変換行列の乗算(任意の方向ベクトルに対する回転)を行い、 結果をこのオブジェクトに設定します。

rotate(v.getX(), v.getY(), v.getZ(), angle) を呼び出したのと同じ結果になります。

パラメータ:
v - ベクトルオブジェクトを指定します。
angle - 回転角度 (degree) を指定します。
例外:
NullPointerException -
引数 v が null の場合に発生します。
IllegalArgumentException -
引数 angle に、 Float.NaN, Float.POSITIVE_INFINITY, Float.NEGATIVE_INFINITY のいずれかが指定された場合に発生します。
IllegalArgumentException -
引数 angle が 0 ではなく、かつ、引数 v が零ベクトルの場合に発生します。 また、これらの引数が示す値を int 幅の値に変換したときに、 この条件を満たす場合にも発生します。

rotateQuat

public void rotateQuat(float x,
                       float y,
                       float z,
                       float w)

変換行列の乗算を行い(四元数による回転)、 結果をこのオブジェクトに設定します。

具体的には this = this x R を行います。Rの内容は

    1-(2yy+2zz)   2xy-2zw      2xz+2yw      0
      2xy+2zw   1-(2xx+2zz)    2yz-2xw      0
      2xz-2yw     2yz+2xw    1-(2xx+2yy)    0
         0           0            0         1
 
です。 四次元ベクトルの長さが 1 になるように 値 x, y, z, w は正規化された のちに、上記の行列が生成されて演算が行われます。

パラメーョ縺