三次元変換行列(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 ); }
続く。
スポンサーサイト