为什么这种反射算法不起作用?

时间:2013-12-23 05:02:29

标签: javascript graphics vector transformation linear-algebra

我想制作一个避免sqrt函数的反射算法,这就是我提出的:

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_1反映在另一个矢量V_2上,我们想要找到矢量V_3,使得V_2 + V_3是反射矢量。首先,我们必须找到向量t * V_1,使得t * V_1-V_2 = V_3。这就是函数中的内容。有什么想法吗?

为了清楚起见,点函数是指点积,乘以标量到向量,减法减去两个向量。该函数被调用,如此,v.reflectOver(n),其中v和n是两个向量。此外,这不会引发错误。这是性能错误,而不是编译器或运行时错误。

1 个答案:

答案 0 :(得分:0)

说出错的地方有点难,但如果你把它画在纸上,你应该得到这样的东西:

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