2013-12-23 71 views
0

我想讓這避免了開方功能的反射算法,這就是我想出了:這個反射算法爲什麼不起作用?

Vector3D.prototype.reflectOver = function(vectorToReflectOver){ //return a reflected vector 
    var t = (vectorToReflectOver.dot(vectorToReflectOver))/(this.dot(vectorToReflectOver)); 

    var reflectedVector = vectorToReflectOver.multiply(2).subtract(this.multiply(t)); 

    return reflectedVector; 
} 

其背後的原因是,如果我們想反映在另一個載體V_2向量V_1,我們想找到一個向量V_3,使得V_2 + V_3是反射向量。首先,我們必須找到向量t * V_1,使得t * V_1 - V_2 = V_3。這是函數中的t。有任何想法嗎?

爲了清楚起見,點函數指的是一個點積,乘以一個標量與一個矢量,減去兩個矢量。函數被調用如下,v.reflectOver(n),其中v和n是兩個向量。此外,這不會引發錯誤。這是性能錯誤,不是編譯器或運行時錯誤。

回答

0

這一點很難說,你出了問題,但如果你畫出來的紙,你應該得到的東西是這樣的:

this.project_onto(other.as_unit_vector()).multiply(2).subtract(this)