Желательно простой формулой без atan2 и acos.
нашел такое но с асоs
float dot(Vec3 a, Vec3 b) //calculates dot product of a and b { return a.x * b.x + a.y * b.y + a.z * b.z; } float mag( Vec3 a) //calculates magnitude of a { return std::sqrt( a.x * a.x + a.y * a.y + a.z * a.z); } int main( ) { Vec3 v1, v2; v1.x = 203; v1.y = 355; v1.z = 922; v2.x = 6; v2.y = 13; v2.z = 198; float angle = std::acos( dot( v1,v2)/( mag( v1)*mag( v2))); }
ronniko
> Желательно простой формулой без atan2 и acos.
Перевод между координатами и углами невозможен без подобных функций.
Что реально возможно - протаскивать в вычислениях только координатные представления без перевода в углы при возможности.
Не храни угол, храни пару (косинус синус)
Не храни пару, храни Царя.
Про представление cossinusov в виде ряда Тейолора мы разбирали в прошлом сезоне, нет?
ronniko
> Как найти угол между двумя нормалями в 3д ?
Измерить транспортиром.
Да выдам всем персонажам в игре транспортиры :)
Чего-то я не понял.
Код из нуль поста считает угол через асоs.
Online калькулятор считает угол через cos.
https://ru.onlinemschool.com/math/assistance/vector/angl/
Че за фигня?
Как правильно надо? Через cos?
О! Да тут вообще не нужен acos и cos!
ronniko
> Online калькулятор считает угол через cos.
Там написано cos(alpha) равен такой-то формуле. Надеюсь ты в курсе что cos и arccos это обратные функции?
Да.
Понял надо через acos делать.
Из первого поста правильный код.
Уже проверил и понял это.
Использование acos в 99% случаях является говнокодом.
ronniko
> Да выдам всем персонажам в игре транспортиры
Лучше выдай каждому персонажу по синусно-косинусной паре,
Пацаны ну как же вы забыли про cross product ?

Он же быстрее и проще считается, чем код из первого поста.
See how cross changes for different angles.
https://www.mathsisfun.com/algebra/vectors-cross-product.html
ronniko
> Он же быстрее и проще считается, чем код из первого поста.
А есть какие то гипотезы и догадки, что он посчитает то же самое?
ronniko
> Он же быстрее и проще считается, чем код из первого поста.
6 умножений вместо 3?
А еще надо взять длину результата и арксинус. И все равно ответ будет неточный: ты не отличишь так угол 80 градусов от 100 градусов