http://www.tonypa.pri.ee/vectors/tut03.html
你能解释一下,他们如何在向量上投射?当我乘以dp * unit vector我得到了什么?我不明白他们做了什么以及他们如何在没有角度或其他任何东西的情况下得到它,只是奇怪的非向量数* 1长度向量从像30k +(我得到巨大的dp数字)得到的任何东西都像投影。我真的很痛苦地经历了所有的公式,试图通过atan2和其他几何计算进行投影。
答案 0 :(得分:1)
做两个向量的点积,除以被投影的向量的长度。如果你在投射之前对两个向量进行标准化,然后将投影乘以作为投影基础的向量的长度(对不起英语不好,我的思想很慢),你就会净化相同的。顺便说一句,在正交坐标系中,你不需要角度来做投影 - 可能也是非正交的。这是矢量之间的角度来自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;