任意軸の回転クォータニオンを作成
第01引数に回転軸を表す3Dベクトル
第02引数に回転する角度
戻り値にクォータニオンが返ります。
任意軸の回転クォータニオンを作成
|
function QuatRotate (v,r){
var rad = r * (Math.PI / 180.0) / 2.0;
var s = Math.sin(rad);
return {
w : Math.cos(rad),
x : v.x * s,
y : v.y * s,
z : v.z * s
}
}
|
使用例です。
例)回転クォータニオンの作成
|
var vec = {x:1,y:0,z:0};
var quat = QuatRotate(vec,90);
|
クォータニオン × 回転クォータニオン
回転クォータニオンを生成してから、別のクォータニオンの前に置いて乗算する関数です。
第01引数に回転軸を表す3Dベクトル
第02引数に回転する角度
第03引数にクォータニオン
戻り値にクォータニオンが返ります。
回転クォータニオンを別のクォータニオンの前に置いて乗算
|
function QuatRotatePref (v,r,q){
var rad = r * (Math.PI / 180.0) / 2.0;
var s = Math.sin(rad);
var qw = Math.cos(rad);
var qx = v.x * s;
var qy = v.y * s;
var qz = v.z * s;
return {
w : q.w * qw - q.x * qx - q.y * qy - q.z * qz,
x : q.y * qz - q.z * qy + q.w * qx + q.x * qw,
y : q.z * qx - q.x * qz + q.w * qy + q.y * qw,
z : q.x * qy - q.y * qx + q.w * qz + q.z * qw
}
}
|
使用例です。
例)[ y 軸に 45 回転] × [ x 軸に 90 回転]
|
var axis_x = {x:1,y:0,z:0};
var quat1 = QuatRotate(axis_x,90);
var axis_y = {x:0,y:1,z:0};
var quat2 = QuatRotatePref(axis_y,45,quat1);
|
回転クォータニオン × クォータニオン
回転クォータニオンを生成してから、別のクォータニオンの後に置いて乗算する関数です。
第01引数に回転軸を表す3Dベクトル
第02引数に回転する角度
第03引数にクォータニオン
戻り値にクォータニオンが返ります。
回転クォータニオンを別のクォータニオンの後に置いて乗算
|
function QuatRotatePost (v,r,q){
var rad = r * (Math.PI / 180.0) / 2.0;
var s = Math.sin(rad);
var qw = Math.cos(rad);
var qx = v.x * s;
var qy = v.y * s;
var qz = v.z * s;
return {
w : qw * q.w - qx * q.x - qy * q.y - qz * q.z,
x : qy * q.z - qz * q.y + qw * q.x + qx * q.w,
y : qz * q.x - qx * q.z + qw * q.y + qy * q.w,
z : qx * q.y - qy * q.x + qw * q.z + qz * q.w
}
}
|
使用例です。
例)[ x 軸に 90 回転] × [ y 軸に 45 回転]
|
var axis_x = {x:1,y:0,z:0};
var quat1 = QuatRotate(axis_x,90);
var axis_y = {x:0,y:1,z:0};
var quat2 = QuatRotatePost(axis_y,45,quat1);
|
|