投影されているベクトルの長さで割った 2 つのベクトルのドット積を実行します。投影する前に両方のベクトルを正規化し、投影ベースであるベクトルの長さを投影に掛けると、同じ結果が得られます (英語が下手で申し訳ありません。私の心は遅いです)。ところで、直交座標系では、投影を行うために角度は必要ありません-おそらく非直交でも。ベクトル間の角度は から導出されるということacos(dotProduct(v1,v2)/length(v1)/length(v2))
です。
var v:Vector.<Number>; // the vector to get projected
var p:Vector.<Number>; // the projection base. Lengths of vectors as number sequences are equal
function dotProduct(v1,v2:Vector.<Number>):Number {
var d:Number=0;
for (var i:int=v1.length-1;i>=0;i--) d+=v1[i]*v2[i];
return d;
}
function lengthOf(v:Vector.<Number):Number { return Math.sqrt(dotProduct(v,v)); }
var pl:Number=dotProduct(v,p)/lengthOf(v)/lengthOf(p); // part of p's length that's the projection length
for (var i:int=v.length-1;i>=0;i--) v[i]=p[i]*pl;