前回のベクトルの内積に続いて,
回転の軸を定める
第50回スクリプト3は,
幸いにして,
Matrix3D.appendRotation(回転の角度, 回転軸のVector3Dオブジェクト)
そこで考えなければならないのは,
現に,
初めにほのめかしたように,
ベクトルの外積から垂直な線を求める
マウスポインタの動きとz軸というふたつのベクトルが決まった。これで外積が求められる。ふたつのベクトルをAとBとすると,
ベクトルは大きさと方向をもつ。もっとも,
したがって,
さて,
Vector3Dオブジェクト.crossProduct(もうひとつのVector3Dオブジェクト)
ここまでのところで,
第50回スクリプト3の中で今回手を加えるのは,
まず,
こうして求めた回転の軸
// フレームアクションを修正
function xRotate(eventObject:Event):void {
// var nRotationY:Number = mySprite.mouseX * nDeceleration;
// var nRotationX:Number = mySprite.mouseY * nDeceleration;
// 回す方向のベクトルを求める
var mouseVector3D:Vector3D = new Vector3D(mySprite.mouseX, -mySprite.mouseY, 0);
// z軸と回す方向のベクトルとの外積を求める
var axisVector3D:Vector3D = Vector3D.Z_AXIS.crossProduct(mouseVector3D);
var vertices2D:Vector.<Number> = new Vector.<Number>();
var nRotation:Number = mouseVector3D.length * nDeceleration;
axisVector3D.normalize(); // ベクトルの長さを1にする
// xTransform(vertices2D, nRotationY, nRotationX);
xTransform(vertices2D, nRotation, axisVector3D); // 引数を変更
xSetOrder();
xDraw(vertices2D);
}