@Arthurmiko

Как повернуть вектор без погрешности?

Есть следующие элементы:
Вектор
a = {x: 1, y: 0}
Функция поворота координаты
function rotate(angle) {
  a.x = a.x * Math.cos(angle) - a.y * Math.sin(angle);
  a.y = a.x * Math.sin(angle) + a.y * Math.cos(angle);
}

Которая вызывается такая образом
rotate(1 * Math.PI / 180);

Проблема в том, что с каждым поворотом теряется точность. Это можно обнаружить если проверить длину вектора.
Math.sqrt( Math.pow(a.x, 2) + Math.pow(a.y, 2) )
Изначально длина равна 1
через 10 вызовов - 0.9999671067997294
через 100 - 0.9831222411821932
И так дальше. При чём если увеличить угол поворота при вызове rotate, то погрешность увеличивается.

Подскажите, пожалуйста, в чём причина и как избавиться от этой ошибки? Может быть стоит использовать другой способ поворота координаты? Какой?
  • Вопрос задан
  • 193 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Codebaker
Всё умею, всё могу!
Для сохранения точности вам придется хранить всю историю поворотов с сохранением знака (по часовой +, против часовой -) и для вычисления последнего - суммировать градусы.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы