Требуются ли для atan2 нормализованные векторы? Что лучше использовать acos или atan для углов между векторами?

При вычислении угла между двумя векторами я традиционно использовал acos, но для этого требуется, чтобы два вектора были нормализованы. atan2 можно использовать для достижения того же (в частности, atan2(b.y_, b.x_) - atan2(a.y_, a.x_)), требуются ли для этого нормализованные векторы?

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

Потом прочитал, что сам atan2 может быть дороже acos, но точнее? И затем я также прочитал другие сети, предлагающие обратное :( много противоречивой информации, не знаю, в чем дело с использованием acos или atan для вычисления угла между двумя векторами.

Что рекомендуется? и каковы преимущества / проблемы для каждого использования?

Любая помощь будет оценена, спасибо!


person lfgtm    schedule 05.07.2019    source источник
comment
atan2 не требует нормализованных векторов   -  person Damien    schedule 05.07.2019
comment
Нет, atan2() не требует масштабирования / нормализации входных данных, если хотя бы один аргумент не равен нулю. Рекомендуемое использование зависит от того, как вводятся входные значения. Простой совет, например, никогда не использовать acos(), просто тупой - навык выбирает подходящий вариант в зависимости от того, как вводятся / вычисляются данные, а также от требуемой формы вывода. Иногда может быть уместно несколько альтернатив.   -  person Peter    schedule 05.07.2019


Ответы (1)


Нет, atan2 не требует нормализованных векторов, и если ваши векторы еще не нормализованы, вы не должны предварительно нормализовать их, так как это может немного снизить точность. Функция корректно работает для любых входов, кроме (0,0).

Никогда не используйте acos ни для чего.

person Sneftel    schedule 05.07.2019
comment
Спасибо. atan2, безусловно, был бы для меня более полезным в ряде ситуаций из-за того, что не нужно было нормализовать;) - person lfgtm; 05.07.2019
comment
Вы можете добавить, что atan2 дает результат по модулю 2-пи, в отличие от acos или atan. - person Damien; 05.07.2019