/* ----------------------------------------------------------------------------- 3Dベクトル関数 ファイル名 : vec3d.as as.Ver : Flash 5 以降 製作 : Hakuhin (C) 2006/05/11 ----------------------------------------------------------------------------- */ /* ----------------------------------------------------------------------------- -------------------------------------- ■ベクトルの型 vec = { x : 0, y : 0, z : 0 }; -------------------------------------- 3Dベクトルをオブジェクト形式で表現しています。 x が x 方向の成分、 y が y 方向の成分、z が z 方向の成分です。 -------------------------------------- ■関数一覧 function Vec3dCreate(x,y,z); // 3Dベクトル作成 function Vec3dClone(vec); // 3Dベクトル複製 function Vec3dAdd(vec1, vec2); // 3Dベクトル同士の加算 function Vec3dSub(vec1, vec2); // 3Dベクトル同士の減算 function Vec3dScale(vec, scale); // 3Dベクトルの乗算 function Vec3dDotProduct(vec1, vec2); // 3Dベクトル同士の内積 function Vec3dCrossProduct(vec1, vec2); // 3Dベクトル同士の外積 function Vec3dLength(vec); // 3Dベクトルの長さ function Vec3dNormalize (vec) // 3Dベクトルの正規化 -------------------------------------- ----------------------------------------------------------------------------- */ /* ------------------------------------------------------------------- ベクトル作成 第01引数 x 成分 第02引数 y 成分 第03引数 z 成分 返り値 ベクトル(オブジェクト) (使用例) var vec = _root.Vec3dCreate(10,5,2); ------------------------------------------------------------------- */ function Vec3dCreate(x,y,z){ return { x : x, y : y, z : z }; } /* ------------------------------------------------------------------- ベクトル複製 第01引数 複製したいベクトル 返り値 ベクトル(オブジェクト) (使用例) var vec1 = _root.Vec2dCreate(10,5); var vec2 = _root.Vec3dClone(vec1); ------------------------------------------------------------------- */ function Vec3dClone(vec){ return { x : vec.x, y : vec.y, z : vec.z }; } /* ------------------------------------------------------------------- ベクトル加算 第01引数 1つ目のベクトル 第02引数 2つ目のベクトル 返り値 ベクトル(オブジェクト) (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dCreate(20,-7,3); var vec3 = _root.Vec3dAdd(vec1,vec2); ------------------------------------------------------------------- */ function Vec3dAdd( vec1, vec2 ){ return { x : vec1.x + vec2.x, y : vec1.y + vec2.y, z : vec1.z + vec2.z }; } /* ------------------------------------------------------------------- ベクトル減算 第01引数 1つ目のベクトル 第02引数 2つ目のベクトル 返り値 ベクトル(オブジェクト) (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dCreate(20,-7,3); var vec3 = _root.Vec3dSub(vec1,vec2); ------------------------------------------------------------------- */ function Vec3dSub( vec1, vec2 ){ return { x : vec1.x - vec2.x, y : vec1.y - vec2.y, z : vec1.z - vec2.z }; } /* ------------------------------------------------------------------- スカラ値で乗算 第01引数 1つ目のベクトル 第02引数 倍率 返り値 ベクトル(オブジェクト) (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dScale(vec1,2); ------------------------------------------------------------------- */ function Vec3dScale( vec, scale ){ return { x : vec.x * scale, y : vec.y * scale, z : vec.z * scale }; } /* ------------------------------------------------------------------- 内積 第01引数 1つ目のベクトル 第02引数 2つ目のベクトル 返り値 内積 (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dCreate(20,-7,3); var dot = _root.Vec3dDotProduct(vec1,vec2); ------------------------------------------------------------------- */ function Vec3dDotProduct( vec1, vec2 ){ return ((vec1.x * vec2.x) + (vec1.y * vec2.y) + (vec1.z * vec2.z)); } /* ------------------------------------------------------------------- 外積 第01引数 1つ目のベクトル 第02引数 2つ目のベクトル 返り値 ベクトル(オブジェクト) (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dCreate(20,-7,3); var vec3 = _root.Vec3dCrossProduct(vec1,vec2); ------------------------------------------------------------------- */ function Vec3dCrossProduct( vec1, vec2 ){ return { x : (vec1.y * vec2.z) - (vec1.z * vec2.y), y : (vec1.z * vec2.x) - (vec1.x * vec2.z), z : (vec1.x * vec2.y) - (vec1.y * vec2.x) }; } /* ------------------------------------------------------------------- ベクトルの長さ 第01引数 長さを調べたいベクトル 返り値 長さ (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var length = _root.Vec3dLength(vec1); ------------------------------------------------------------------- */ function Vec3dLength( vec ){ return Math.sqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z)); } /* ------------------------------------------------------------------- ベクトルの正規化 第01引数 正規化したいベクトル 返り値 正規化されたベクトル(オブジェクト) (使用例) var vec1 = _root.Vec3dCreate(10,5,2); var vec2 = _root.Vec3dNormalize(vec1); ------------------------------------------------------------------- */ function Vec3dNormalize ( vec ){ var length = Math.sqrt((vec.x * vec.x) + (vec.y * vec.y) + (vec.z * vec.z)); if(length > 0) length = 1 / length; return { x : vec.x * length, y : vec.y * length, z : vec.z * length }; }