--- trunk/OOPSE/libmdtools/Mat3x3d.cpp 2004/08/09 14:50:35 1451 +++ trunk/OOPSE/libmdtools/Mat3x3d.cpp 2004/08/23 15:11:36 1452 @@ -24,22 +24,22 @@ Mat3x3d::Mat3x3d(const Quaternion& q){ double q2Sqr; double q3Sqr; - q0Sqr = q.quat[0] * q.quat[0]; - q1Sqr = q.quat[1] * q.quat[1]; - q2Sqr = q.quat[2] * q.quat[2]; - q3Sqr = q.quat[3] * q.quat[3]; + q0Sqr = q.x * q.x; + q1Sqr = q.y * q.y; + q2Sqr = q.z * q.z; + q3Sqr = q.w * q.w; element[0][0]= q0Sqr + q1Sqr - q2Sqr - q3Sqr; - element[0][1] = 2.0 * ( q.quat[1] * q.quat[2] + q.quat[0] * q.quat[3] ); - element[0][2] = 2.0 * ( q.quat[1] * q.quat[3] - q.quat[0] * q.quat[2] ); + element[0][1] = 2.0 * ( q.y * q.z + q.x * q.w ); + element[0][2] = 2.0 * ( q.y * q.w - q.x * q.z ); - element[1][0] = 2.0 * ( q.quat[1] * q.quat[2] - q.quat[0] * q.quat[3] ); + element[1][0] = 2.0 * ( q.y * q.z - q.x * q.w ); element[1][1] = q0Sqr - q1Sqr + q2Sqr - q3Sqr; - element[1][2] = 2.0 * ( q.quat[2] * q.quat[3] + q.quat[0] * q.quat[1] ); + element[1][2] = 2.0 * ( q.z * q.w + q.x * q.y ); - element[2][0] = 2.0 * ( q.quat[1] * q.quat[3] + q.quat[0] * q.quat[2] ); - element[2][1] = 2.0 * ( q.quat[2] * q.quat[3] - q.quat[0] * q.quat[1] ); + element[2][0] = 2.0 * ( q.y * q.w + q.x * q.z ); + element[2][1] = 2.0 * ( q.z * q.w - q.x * q.y ); element[2][2] = q0Sqr - q1Sqr -q2Sqr +q3Sqr; } @@ -142,10 +142,10 @@ Quaternion Mat3x3d::toQuaternion(){ if( t > 0.0 ){ s = 0.5 / sqrt( t ); - q.quat[0] = 0.25 / s; - q.quat[1] = (element[1][2] - element[2][1]) * s; - q.quat[2] = (element[2][0] - element[0][2]) * s; - q.quat[3] = (element[0][1] - element[1][0]) * s; + q.x = 0.25 / s; + q.y = (element[1][2] - element[2][1]) * s; + q.z = (element[2][0] - element[0][2]) * s; + q.w = (element[0][1] - element[1][0]) * s; } else{ @@ -155,24 +155,24 @@ Quaternion Mat3x3d::toQuaternion(){ if( ad1 >= ad2 && ad1 >= ad3 ){ s = 2.0 * sqrt( 1.0 + element[0][0] - element[1][1] - element[2][2] ); - q.quat[0] = (element[1][2] + element[2][1]) / s; - q.quat[1] = 0.5 / s; - q.quat[2] = (element[0][1] + element[1][0]) / s; - q.quat[3] = (element[0][2] + element[2][0]) / s; + q.x = (element[1][2] + element[2][1]) / s; + q.y = 0.5 / s; + q.z = (element[0][1] + element[1][0]) / s; + q.w = (element[0][2] + element[2][0]) / s; } else if( ad2 >= ad1 && ad2 >= ad3 ){ s = sqrt( 1.0 + element[1][1] - element[0][0] - element[2][2] ) * 2.0; - q.quat[0] = (element[0][2] + element[2][0]) / s; - q.quat[1] = (element[0][1] + element[1][0]) / s; - q.quat[2] = 0.5 / s; - q.quat[3] = (element[1][2] + element[2][1]) / s; + q.x = (element[0][2] + element[2][0]) / s; + q.y = (element[0][1] + element[1][0]) / s; + q.z = 0.5 / s; + q.w = (element[1][2] + element[2][1]) / s; } else{ s = sqrt( 1.0 + element[2][2] - element[0][0] - element[1][1] ) * 2.0; - q.quat[0] = (element[0][1] + element[1][0]) / s; - q.quat[1] = (element[0][2] + element[2][0]) / s; - q.quat[2] = (element[1][2] + element[2][1]) / s; - q.quat[3] = 0.5 / s; + q.x = (element[0][1] + element[1][0]) / s; + q.y = (element[0][2] + element[2][0]) / s; + q.z = (element[1][2] + element[2][1]) / s; + q.w = 0.5 / s; } } return q;