Я хотел сделать алгоритм отражения, что избегали функцию 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 - два вектора. Кроме того, это не вызывает ошибки. Это ошибка производительности, а не ошибка компилятора или времени выполнения.