|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Objectcom.docomostar.ui.util3d.Transform
public class Transform
浮動小数による三次元アフィン変換用の行列データを保持する、 変換行列クラスを定義します。 行列の内容は、 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 は常に真です。
コンストラクタの概要 | |
---|---|
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 |
コンストラクタの詳細 |
---|
public Transform()
変換行列オブジェクトを生成します。
内容は恒等変換の状態、つまり
[1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1]
になります。
public Transform(Transform transform)
任意の変換行列オブジェクトの内容を完全に複製することで、 新規に変換行列オブジェクトを生成します。
transform
- 変換行列オブジェクトを指定します。
NullPointerException
-
メソッドの詳細 |
---|
public void setIdentity()
行列の内容を恒等変換の状態、つまり
[1 0 0 0][0 1 0 0][0 0 1 0][0 0 0 1]
にします。
public void set(Transform transform)
任意の変換行列オブジェクトの内容を完全に複製することで、 この変換行列オブジェクトの内容を再設定します。
transform
- 変換行列オブジェクトを指定します。
NullPointerException
-
public void set(float[] matrix)
実数の配列の内容を用いて、変換行列を再設定します。
matrix
- 実数の配列を指定します。長さが 16 以上なことが必要です。
長さが 17 以上のとき、 17個目以降の要素の内容は無視されます。
NullPointerException
-
IllegalArgumentException
-
IllegalArgumentException
-
public void get(float[] matrix)
変換行列の内容を、実数の配列に設定させることで取得します。
matrix
- 実数群を設定させたい配列を指定します。
長さが 16 以上なことが必要です。
長さが 17 以上のとき、 17個目以降の要素の内容は変更されません。
NullPointerException
-
IllegalArgumentException
-
public void set(int index, float value)
変換行列の要素を一つ設定します。
index
- 要素の番号を指定します。 0 から 15 の範囲で指定します。value
- 要素の値を指定します。
IllegalArgumentException
-
IllegalArgumentException
-
public float get(int index)
変換行列の要素を一つ取得します。
index
- 要素の番号を指定します。 0 から 15 の範囲で指定します。
IllegalArgumentException
-
public void invert()
変換行列の逆行列を計算して、結果を格納します。
ArithmeticException
-
public void transpose()
変換行列の転置行列を算出して、結果をこのオブジェクトに設定します。
public void multiply(Transform transform)
変換行列の乗算を行い、結果をこのオブジェクトに設定します。
具体的には
this = this x transform
を行います。
引数に this を渡したときにも、正常に演算が行われます。
transform
- 変換行列オブジェクトを指定します。
NullPointerException
-
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
-
public void scale(Vector3D v)
変換行列の乗算(拡大/縮小)を行い、結果をこのオブジェクトに設定します。
scale(v.getX(), v.getY(), v.getZ())
を呼び出したのと同じ結果になります。
v
- ベクトルオブジェクトを指定します。
NullPointerException
-
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
-
IllegalArgumentException
-
public void rotate(Vector3D v, float angle)
変換行列の乗算(任意の方向ベクトルに対する回転)を行い、 結果をこのオブジェクトに設定します。
rotate(v.getX(), v.getY(), v.getZ(), angle)
を呼び出したのと同じ結果になります。
v
- ベクトルオブジェクトを指定します。angle
- 回転角度 (degree) を指定します。
NullPointerException
-
IllegalArgumentException
-
IllegalArgumentException
-
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 は正規化された のちに、上記の行列が生成されて演算が行われます。