2013-11-25 3 views
1

Эй, я сделал функцию вращения в Javascript для вращения некоторого 2D-вектора (точки).Функция вращения JS, выводящая странное значение X

Выход Y функции работает должным образом, однако значение X выводит какое-то безумное число, может ли кто-нибудь указать пол в моей логике?

Vector2.prototype.rotate = function(degrees){ 

    var angle = degrees * TO_RADIANS; //Convert to radians. 
    var x = (this.getX() * Math.cos(angle)) - (this.getY() * Math.sin(angle)); 
    var y = (this.getX() * Math.sin(angle)) + (this.getY() * Math.cos(angle)); 
    return new Vector2(x,y); 
}; 

Вектор Ввод (1,0) в эту функцию с поворотом на 90 градусов выводит 6.someDecimalPlaces E-17; что, очевидно, неверно.

Выведенное значение Y однако работает, как ожидалось, и возвращает 1.

Заранее спасибо

+1

6e-17 в значительной степени нулевой. Это должно быть результатом использования арифметики с плавающей запятой. – Sirko

+1

Вы можете улучшить производительность своего вращения, если вычислить sin и cos только один раз. Вероятно, это не проблема, но это может быть важно, если вращение вызывает очень часто. – oyophant

+0

Спасибо вам за ваши комментарии! Завтра математическая голова явно осталась в постели сегодня утром. –

ответ

1

В «6.someDecimalPlaces е-17», вы видите, это связанно с обработкой JavaScript в числах с плавающей запятой. То, что вы видите, представляет собой ошибку округления при преобразовании обратно из двоичной с плавающей запятой в десятичную. Там нет легкого решения, хотя есть библиотеки, которые пытаются преодолеть эту проблему.

Если вы хотите, чтобы округлые числа для идеального CSS-макияжа для пикселя, вам лучше всего округлить числа, выходящие из этой функции или отбросив их до целого числа.

+0

Ха-ха спасибо, раннее утреннее кодирование для вас там lol. Даже не подумал связать значение с 0. Приветствия! –