19:48
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: Alcoholik  
QuaternionConverter
DANGER1979Дата: Четверг, 26.08.2010, 14:09 | Сообщение # 1
Постоялец
Группа: I'm V.I.P.
Сообщений: 365
Награды: 5
Город: Гродно
Репутация: 557
Замечания: 0%
Статус:
[INC] QuaternionConverter

Описание:

Что такое
Heading(Yaw) - рысканье (курс),
Attitude(Pitch) - тангаж (килевая качка),
Bank(Roll) - крен (бортовая качка) ?

Рысканье, тангаж и крен - авиационные термины, обозначающие вращения в Декартовой системе координат (по Эйлеровым углам), относительно локальной системы координат самолёта.

Вообразите, что вы видите впереди и ниже себя самолёт, горизонтально летящий на север.
Ось Z направлена снизу прямо вверх. Рысканье - вращение вокруг оси Z.
Ось X идёт от конца левого крыла к концу правого. Тангаж - это вращение вокруг оси X.
Ось Y проходит от хвоста к носу самолёта. Крен - вращение вокруг оси Y.

Данный инклюд преобразовывает (с исправлением) кватернионы в углы Эйлера

Code
stock ConvertNonNormaQuatToEuler(Float: qw, Float: qx, Float:qy, Float:qz,
               &Float:heading, &Float:attitude, &Float:bank)
{
           new Float: sqw = qw*qw;
           new Float: sqx = qx*qx;
           new Float: sqy = qy*qy;
           new Float: sqz = qz*qz;
           new Float: unit = sqx + sqy + sqz + sqw;//если normalised - показатель коррекции
           new Float: test = qx*qy + qz*qw;
           if (test > 0.499*unit)
           { // singularity at north pole - особенность на северном полюсе
                heading = 2*atan2(qx,qw);
                attitude = 3.141592653/2;
                bank = 0;
                return 1;
           }
           if (test < -0.499*unit)
           { // singularity at south pole - особенность на южном полюсе
                heading = -2*atan2(qx,qw);
                attitude = -3.141592653/2;
                bank = 0;
                return 1;
           }
           heading = atan2(2*qy*qw - 2*qx*qz, sqx - sqy - sqz + sqw);
           attitude = asin(2*test/unit);
           bank = atan2(2*qx*qw - 2*qy*qz, -sqx + sqy - sqz + sqw);
           return 1;
}

Code
stock GetVehicleRotation(vehicleid,&Float:heading, &Float:attitude, &Float:bank)
{
           new Float:quat_w,Float:quat_x,Float:quat_y,Float:quat_z;
           GetVehicleRotationQuat(vehicleid,quat_w,quat_x,quat_y,quat_z);
           ConvertNonNormaQuatToEuler(quat_w,quat_x,quat_z,quat_y, heading, attitude, bank);
           bank = -1*bank;
           return 1;
}

Внимание 1: кай наверно попутал местами quat_z и quat_y. Исправил.
Внимание 2: тангаж домножил на -1, т.к. почему-то положительный тангаж определялся как отрицательный.

Пример использования

Code
new Float:x,Float:y,Float:z, Float:rotX,Float:rotY,Float:rotZ, Float:angle;
GetVehiclePos(GetPlayerVehicleID(playerid), x, y, z);
GetVehicleZAngle(GetPlayerVehicleID(playerid), angle);
GetVehicleRotation(GetPlayerVehicleID(playerid), rotZ, rotX, rotY);
GetXYZInrear(3.5, angle, rotY, x, y, z);
CreateObject(2899, x, y, z-0.6, rotX, rotY, angle-90.0, 200.0);

Название: [INC] QuaternionConverter.inc
Размер: 1.02 кб
Доступен до: 2010-09-25 14:21:40
Описание: Конвертирует Кватернионы в углы Эйлера
Ссылка для скачивания файла: http://ifolder.ru/19036797



[UCP] Статистика сервера (MySQL)
GTA:SA VirtualWorld Server - LifeSimulator
[Продажа][GM] VirtualWorld v3.0.219
[FS] VW_SystemOfNeed - Система потребностей
[FS] VW_SystemOfBuying - Система покупки авто
[FS] VW_Speedometer - с системой расхода топлива и учёта пробега
[FS] VW_CargoShip - Грузовое судно


Сообщение отредактировал DANGER1979 - Четверг, 26.08.2010, 14:52
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua