ФлеймФорумПрограммирование

Как найти угол между двумя нормалями в 3д ?

Страницы: 1 2 3 Следующая »
#0
18:53, 8 окт 2025

Желательно простой формулой без atan2 и acos.

#1
19:02, 8 окт 2025

нашел такое но с асо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)));
}
#2
19:06, 8 окт 2025

ronniko
> Желательно простой формулой без atan2 и acos.

Перевод между координатами и углами невозможен без подобных функций.
Что реально возможно - протаскивать в вычислениях только координатные представления без перевода в углы при возможности.

#3
19:11, 8 окт 2025

Не храни угол, храни пару (косинус синус)

#4
20:38, 8 окт 2025

Не храни пару, храни Царя.

Про представление cossinusov в виде ряда Тейолора мы разбирали в прошлом сезоне, нет?

#5
1:21, 9 окт 2025

ronniko
> Как найти угол между двумя нормалями в 3д ?
Измерить транспортиром.

#6
8:54, 9 окт 2025

Да выдам всем персонажам в игре транспортиры :)

#7
(Правка: 11:53) 11:44, 9 окт 2025

Чего-то я не понял.
Код из нуль поста считает угол через асоs.
Online калькулятор считает угол через cos.
https://ru.onlinemschool.com/math/assistance/vector/angl/
Че за фигня?
Как правильно надо? Через cos?

О! Да тут вообще не нужен acos и cos!

#8
11:58, 9 окт 2025

ronniko
> Online калькулятор считает угол через cos.
Там написано cos(alpha) равен такой-то формуле. Надеюсь ты в курсе что cos и arccos  это обратные функции?

#9
(Правка: 12:10) 12:02, 9 окт 2025

Да.
Понял надо через acos делать.
Из первого поста правильный код.
Уже проверил и понял это.

#10
13:20, 9 окт 2025

Использование acos в 99% случаях является говнокодом.

#11
13:45, 9 окт 2025

ronniko
> Да выдам всем персонажам в игре транспортиры

Лучше выдай каждому персонажу по синусно-косинусной паре,

#12
(Правка: 12:18) 12:10, 16 окт 2025

Пацаны ну как же вы забыли про cross product ?
bandicam 2025-10-16 12-09-22-778 | Как найти угол между двумя нормалями в 3д ?

Он же быстрее и проще считается, чем код из первого поста.

See how cross changes for different angles.
https://www.mathsisfun.com/algebra/vectors-cross-product.html

#13
12:43, 16 окт 2025

ronniko
> Он же быстрее и проще считается, чем код из первого поста.

А есть какие то гипотезы и догадки, что он посчитает то же самое?

#14
12:51, 16 окт 2025

ronniko
> Он же быстрее и проще считается, чем код из первого поста.
6 умножений вместо 3?
А еще надо взять длину результата и арксинус. И все равно ответ будет неточный: ты не отличишь так угол 80 градусов от 100 градусов

Страницы: 1 2 3 Следующая »
ФлеймФорумПрограммирование