2013-12-23 38 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)