Показать сообщение отдельно
Старый 12.02.2006, 23:21   #3
jimon
 
Сообщений: n/a
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);
}
для блица пока немногу написать (занят сильно)
 
Ответить с цитированием