2013-12-23 2 views
0

내가 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_2를 통해 벡터 V_1을 반영하려는 경우, 우리는 V_2 + V_3이 반사 벡터가되도록 벡터 V_3을 찾고 싶습니다. 먼저 t * V_1 - V_2 = V_3이되도록 벡터 t * V_1를 찾아야합니다. 이것은 함수에있는 것입니다. 어떤 아이디어?

도트 함수는 내적을 참조하고, 스칼라를 벡터에 곱하고, 빼기는 두 벡터를 뺍니다. 이 함수는 v.reflectOver (n)와 같이 호출됩니다. 여기서 v와 n은 두 벡터입니다. 또한 오류가 발생하지 않습니다. 이는 컴파일러 오류나 런타임 오류가 아닌 성능 오류입니다.

답변

0

그것은 당신이 잘못 어디로 갔는지 말을 조금 어렵습니다,하지만 당신은 종이에 그것을 밖으로 끌어 경우이 같은 얻어야한다 :

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