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

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

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

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

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

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

1 ответ

Решение

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

Вы никогда не должны использовать acos для всего.

Другие вопросы по тегам