2013-02-26 176 views
0

http://www.tonypa.pri.ee/vectors/tut03.htmlAS3矢量投影

你能向我解釋,他們如何在矢量得到的投影?當我乘以dp *單位矢量時,我會得到什麼?我不明白他們做了什麼,他們是如何得到它,沒有角度或其他任何東西,只是奇怪的非矢量數* 1長度的矢量從像30k +(我得到巨大的dp數字)像投影。我經歷了所有的公式,並嘗試通過atan2和其他幾何計算得到投影。

+1

請不要「請,分享的解決方案,並非常讚賞的解釋」,「我真的可以使用一些幫助,這一個」,「拜託,」等你的問題。這是無用的噪音。 – Doorknob 2013-02-26 14:03:10

回答

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; 
+0

謝謝你,你總是幫助。但我不明白。我希望你明白我有線條,而不是矢量?我改變我k(我已經使用),v1.length到vec1LEN,我通過畢達哥拉斯,d是dp。它不會工作,輸出說錯誤1069.爲什麼這不會工作? var dp = vec1dx * vec2dx + vec1dy * vec2dy;我只需要一個點和一條線之間的最短線@任何角度> _ < – SherWood 2013-02-27 08:30:30

+0

那麼,從一個點到另一條線的最短線是該點的法線,並且要獲得它的值(你有原點)需要製作一個與你的線正交的矢量,並將一個矢量從一行上的點投影到正常的點上。也許你也沒有完全解釋你真正需要什麼,所以你收到了一個模糊的答案。 – Vesper 2013-02-27 12:09:19