三次元変換行列(6)
2008/05/13 21:14 - AS3.0 超初心者のメモ
メソッドのコードの続き。
前回は行列合成(concat)と複製(clone)についてでした。 残りの各種移動系メソッドについて見ていきます。
座標軸回転(rotateAxis)
三次元表現なのでX軸、Y軸、Z軸それぞれに対して軸回転メソッドを定義します。
メソッドの流れとしては以下のとおり。
- 新規に Matrix3D オブジェクトを生成
- その新規行列の当該成分に対して当該値を代入
- 現在の行列との合成
引数となる角度は flash.geom.Matrix に倣ってラジアンを使用することとします。
/**
* X軸回転
* | 1 0 0 0 |
* | 0 cos -sin 0 |
* | 0 sin cos 0 |
* | 0 0 0 1 |
*
* @param angle 角度(ラジアン単位)
*/
public function rotateX( angle:Number ):void {
var mat:Matrix3D = new Matrix3D();
var cos:Number = Math.cos( angle );
var sin:Number = Math.sin( angle );
mat.e = mat.i = cos;
mat.f = -sin;
mat.h = sin;
concat( mat );
}
/**
* Y軸回転
* | cos 0 sin 0 |
* | 0 1 0 0 |
* | -sin 0 cos 0 |
* | 0 0 0 1 |
*
* @param angle 角度(ラジアン単位)
*/
public function rotateY( angle:Number ):void {
var mat:Matrix3D = new Matrix3D();
var cos:Number = Math.cos( angle );
var sin:Number = Math.sin( angle );
mat.a = mat.i = cos;
mat.c = sin;
mat.g = -sin;
concat( mat );
}
/**
* Z軸回転
* | cos -sin 0 0 |
* | sin cos 0 0 |
* | 0 0 1 0 |
* | 0 0 0 1 |
*
* @param angle 角度(ラジアン単位)
*/
public function rotateZ( angle:Number ):void {
var mat:Matrix3D = new Matrix3D();
var cos:Number = Math.cos( angle );
var sin:Number = Math.sin( angle );
mat.a = mat.e = cos;
mat.b = -sin;
mat.d = sin;
concat( mat );
}
続く。



