HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Найти эйлеровы углы по вектору
Look-at
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4242

Рейтинг



Найти эйлеровы углы по вектору

Есть трёхмерный вектор. Требуется найти такие углы по X и Y, чтобы Z была параллельна вектору. Помогите гомонитарию, пожалуйста =(

Сообщить модератору | IP: Записан
Сообщение: 99955

Старое сообщение 07-06-2012 16:12
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35062
Нанёс повреждений: 514 ед.
Возраст: 39

Рейтинг



Награды
 
[1 награда]


Не мог бы гомонитарий выразиться яснее? Что значит "Z была параллельна вектору"? К тому же в терминологии углов эйлера лучше оперировать понятиями "вперед, вправо, вверх", а то мало ли что у вас там по оси Z.

__________________

Сообщить модератору | IP: Записан
Сообщение: 99956

Старое сообщение 07-06-2012 16:15
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4242

Рейтинг



Известен вектор (X1, Y1, Z1).
Найти такие pitch (по X) и yaw (по Y), чтобы объект в (0, 0, 0) был осью Z направлен в (X1, Y1, Z1). Порядок вращения XYZ.

Сообщить модератору | IP: Записан
Сообщение: 99957

Старое сообщение 07-06-2012 16:21
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | IP: Записан
Сообщение: 99960

Старое сообщение 07-06-2012 17:02
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4242

Рейтинг



Цитата:
Дядя Миша писал:
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 будет равен чему угодно

Мне ноль нужен. По сути надо найти азимут и высоту.

Сообщить модератору | IP: Записан
Сообщение: 99977

Старое сообщение 08-06-2012 08:02
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33064
Нанёс повреждений: 392 ед.

Рейтинг



вектор можно сконвертировать только в PITCH и YAW. ROLL вычислить не получится, ибо один вектор не содержит в себе этой информации, увы.
Тут уже три вектора требуется, т.е. система координат.

Цитата:
nemyax писал:
Не нашёл иёного определения

Ужосы. А это что:
C++ Source Code:
1
void VectorAngles( const float *forward, float *angles )
2
{
3
  float	tmp, yaw, pitch;
4
 
5
  if( !forward || !angles )
6
  {
7
    if( angles ) VectorClear( angles );
8
    return;
9
  }
10
 
11
  if( forward[1] == 0 && forward[0] == 0 )
12
  {
13
    // fast case
14
    yaw = 0;
15
    if( forward[2] > 0 )
16
      pitch = 90.0f;
17
    else pitch = 270.0f;
18
  }
19
  else
20
  {
21
    yaw = ( atan2( forward[1], forward[0] ) * 180 / M_PI );
22
    if( yaw < 0 ) yaw += 360;
23
 
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;
27
  }
28
  VectorSet( angles, pitch, yaw, 0 );
29
}

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 99978

Старое сообщение 08-06-2012 09:40
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 18:34. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Найти эйлеровы углы по вектору
Look-at
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024