http://www.tonypa.pri.ee/vectors/tut03.html
你能给我解释一下,他们是如何在矢量上投影的?当我乘以 dp * 单位向量时,我得到什么?我不明白他们做了什么以及他们如何在没有角度或其他任何东西的情况下得到它,只是奇怪的非向量数 * 1 长度向量从 30k+ (我得到巨大的 dp 数)之类的投影中得到。我真的受够了所有的公式,试图用 atan2 和其他几何计算得到一个投影。
http://www.tonypa.pri.ee/vectors/tut03.html
你能给我解释一下,他们是如何在矢量上投影的?当我乘以 dp * 单位向量时,我得到什么?我不明白他们做了什么以及他们如何在没有角度或其他任何东西的情况下得到它,只是奇怪的非向量数 * 1 长度向量从 30k+ (我得到巨大的 dp 数)之类的投影中得到。我真的受够了所有的公式,试图用 atan2 和其他几何计算得到一个投影。
做两个向量的点积,除以被投影的向量的长度。如果您在投影之前对两个向量进行归一化,然后将投影乘以作为投影基础的向量的长度,您将得到相同的结果(抱歉英语不好,我的思维很慢)。顺便说一句,在正交坐标系中,您不需要角度来进行投影 - 也可能是非正交的。就是向量之间的夹角是从 导出的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;