forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   3D-программирование (http://forum.boolean.name/forumdisplay.php?f=12)
-   -   Кватернионы мать их :) вернее отца :) (http://forum.boolean.name/showthread.php?t=672)

Conan Fedr 12.02.2006 20:48

Може ктонить сможен написать функцию для перевода кватерниона в обычный вектор :) . После прочтения статей по ним у меня постепенно срывает крышу . Всетаки зря какойто тип их в 18 веке придумал :).

Прошу кто можут функцию под блитз написать для перевода кватерниона в вектор и функцию для обратной конвертации :) .

impersonalis 12.02.2006 21:15

Jimona спроси :)

jimon 12.02.2006 23:21

Jimon game engine 0.61
отключоные программные модули
файл math.cpp
Код:

void Quaternion_To_Euler(const dQuaternion quaternion,vector3df &euler){
        dReal w,x,y,z;
        w=quaternion[0];
        x=quaternion[1];
        y=quaternion[2];
        z=quaternion[3];
        double sqw = w*w; 
        double sqx = x*x; 
        double sqy = y*y; 
        double sqz = z*z;
        euler.Z = (float) (atan2(2.0 * (x*y + z*w),(sqx - sqy - sqz + sqw))*GRAD_PI);
        euler.X = (float) (atan2(2.0 * (y*z + x*w),(-sqx - sqy + sqz + sqw))*GRAD_PI);
        euler.Y = (float) (asin(-2.0 * (x*z - y*w))*GRAD_PI);
}

void Euler_To_Quaternion(const vector3df &euler, dQuaternion quaternion)
{
        double _heading=euler.Z*GRAD_PI2/2.0;
        double _attitude=euler.Y*GRAD_PI2/2.0;
        double _bank=euler.X*GRAD_PI2/2.0;
        double c1 = cos(_heading); 
        double s1 = sin(_heading); 
        double c2 = cos(_attitude); 
        double s2 = sin(_attitude); 
        double c3 = cos(_bank); 
        double s3 = sin(_bank);
        double c1c2 = c1*c2; 
        double s1s2 = s1*s2; 
        quaternion[0]=(dReal) (c1c2*c3 + s1s2*s3);
        quaternion[1]=(dReal) (c1c2*s3 - s1s2*c3);
        quaternion[2]=(dReal) (c1*s2*c3 + s1*c2*s3);       
        quaternion[3]=(dReal) (s1*c2*c3 - c1*s2*s3);
}

для блица пока немногу написать (занят сильно)

alex-mad 13.02.2006 00:31

эээ... объясните непосвящённому, что есть "кватерниона"?

Conan Fedr 13.02.2006 01:34

Кватерниона это ужасная хрень :) Точно немогу обьяснить :) Но это что-то типа четырех мерного вектора ( хз зачем :) ) .

alex-mad 13.02.2006 01:44

гы... во бред!
и нафига он нужен, живя в 3-х мерном пространстве

Conan Fedr 13.02.2006 01:45

Спасибо большое jimon мне под блитз пока и ненадо всеровно то что я под блитзем написал нифига непашет :) . Я доделаю хоть свой cam есдитор :) под сями . Еще раз спасибо .

Conan Fedr 13.02.2006 02:15

Чему равна константа GRAD_PI ? :)

jimon 13.02.2006 22:23

Код:

const f64 irr::core::GRAD_PI = 180.0 / 3.1415926535897932384626433832795
квартерионы форева ! :)

2 alex-mad :
сравни умножение вектора положение на полную матрицу поворота
и вектора положения на квартерион
увидиш разницу

и квартерион занимает 4 числа вместо того что матрица поворота по одной оси занимает 16 чисел

если всеравно непонятно - учи основы физики, и игровой геометрии

Conan Fedr 15.02.2006 18:09

jimon можеш чтонибудь конретное посоветовать почитать по этой системе координат в которой используется 4 оси . сорри если что нетак сказал :) . Вот я неврублюка это все перемнить ведь до пусим в OGL можно задавать вершину четырьмя координатами а я хз нафик четвертая нужна :) . Вот хочется разобарться. Ну и по ксатернионам чтонить для нубов :) , но помоему это все из одной тарелки :) . Заранее спасибо :)

pax 15.02.2006 18:28

в ОГЛ координаты задаются так:
если задано 4 переменных x,y,z,w то реальные координаты получаются такие:
x/w,y/w,z/w
по умолчанию w=1.0 при задании координат 2-мя и 3-мя числами

pax 15.02.2006 18:43

Вот тока что нашел справку по кватернионам
quat3rot.pdf

pax 15.02.2006 18:49

вот тут еще есть инфа:
http://allprogramming.jino-net.ru/ebooks/d.../book3/43.phtml

Conan Fedr 15.02.2006 19:05

Спасиба . Но вы видели сколько я в той мессаге опечаток сделал щя сам сижу и прусь :)

jimon 15.02.2006 22:36

читать все здесь
http://gamedev.ru/articles/?sect=3
думаю понятно будет :)


Часовой пояс GMT +4, время: 12:54.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot