2013-12-23 3 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_1 над другим вектором V_2, мы хотим найти такой вектор 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) 
Смежные вопросы