HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Найти эйлеровы углы по вектору (https://hlfx.ru/forum/showthread.php?threadid=3461)
Отправлено nemyax 07-06-2012 в 16:12:
Найти эйлеровы углы по вектору
Есть трёхмерный вектор. Требуется найти такие углы по X и Y, чтобы Z была параллельна вектору. Помогите гомонитарию, пожалуйста =(
Отправлено XaeroX 07-06-2012 в 16:15:
Не мог бы гомонитарий выразиться яснее? Что значит "Z была параллельна вектору"? К тому же в терминологии углов эйлера лучше оперировать понятиями "вперед, вправо, вверх", а то мало ли что у вас там по оси Z.
__________________
Отправлено nemyax 07-06-2012 в 16:21:
Известен вектор (X1, Y1, Z1).
Найти такие pitch (по X) и yaw (по Y), чтобы объект в (0, 0, 0) был осью Z направлен в (X1, Y1, Z1). Порядок вращения XYZ.
Отправлено Дядя Миша 07-06-2012 в 17:02:
UTIL_VecToAngles - в любой халфе\кваке.
Но Z будет равен чему угодно. Либо 0 либо 180 на выбор.
Добавлено 07-06-2012 в 21:02:
Цитата:
nemyax писал:
Найти такие pitch (по X) и yaw (по Y)
да нельзя ассоциировать компоненты вектора с углами эйлера
в противном случае они бы конвертировались при помощи хитрого множителя.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено nemyax 08-06-2012 в 08:02:
Цитата:
Дядя Миша писал:
UTIL_VecToAngles
Не нашёл иёного определения. Наговнокодил себе такое:
code:
aim_at({X,Y,Z}) ->
aim_at(X, Y, Z).
aim_at(X, Y, MaybeZ) ->
Z = if
MaybeZ == 0.0 -> 1.0E-30;
true -> MaybeZ
end,
ToAngles = fun(Rad) -> Rad * 180/math:pi() end,
HorizDist = math:sqrt(X*X+Z*Z),
Alt = ToAngles(math:atan(Y/HorizDist)),
Az = ToAngles(math:atan2(X, Z)),
{Az, Alt, 0.0}.
Вроде работает.
Цитата:
Дядя Миша писал:
да нельзя ассоциировать компоненты вектора с углами эйлера
Я и не ассоциирую. Имелось в виду, что тангажырует тут по оси X, а рыскает по Y.
Цитата:
Дядя Миша писал:
Но Z будет равен чему угодно
Мне ноль нужен. По сути надо найти азимут и высоту.
Отправлено Дядя Миша 08-06-2012 в 09:40:
вектор можно сконвертировать только в PITCH и YAW. ROLL вычислить не получится, ибо один вектор не содержит в себе этой информации, увы.
Тут уже три вектора требуется, т.е. система координат.
Цитата:
nemyax писал:
Не нашёл иёного определения
Ужосы. А это что:
C++ Source Code:
1 | void VectorAngles( const float *forward, float *angles ) |
5 | if( !forward || !angles ) |
7 | if( angles ) VectorClear( angles ); |
11 | if( forward[1] == 0 && forward[0] == 0 ) |
21 | yaw = ( atan2( forward[1], forward[0] ) * 180 / M_PI ); |
22 | if( yaw < 0 ) yaw += 360; |
24 | tmp = sqrt( forward[0] * forward[0] + forward[1] * forward[1] ); |
25 | pitch = ( atan2( forward[2], tmp ) * 180 / M_PI ); |
26 | if( pitch < 0 ) pitch += 360; |
28 | VectorSet( angles, pitch, yaw, 0 ); |
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024