52 static const float kTol = 0.001;
53 static const float kRad2Deg = 180. / 3.1415927;
54 static const float kDeg2Rad = 3.1415927 / 180.;
107 float cosAng, sinAng;
138 cosAng = cosAng * ls * le;
141 sinAng = lr = sqrt(rot[1] * rot[1] + rot[2] * rot[2] + rot[3] * rot[3]);
143 sinAng = sinAng * ls * le;
144 rot[0] = (float) atan2 (sinAng, cosAng) *
kRad2Deg;
148 rot[1] *= -lr; rot[2] *= -lr; rot[3] *= lr;
164 q[0] = A[1] * sinAng2; q[1] = A[2] * sinAng2; q[2] = A[3] * sinAng2;
170 float q0[4], q1[4], q2[4];
171 float theta2, sinTheta2;
182 q2[0] = q1[1]*q0[2] - q1[2]*q0[1] + q1[3]*q0[0] + q1[0]*q0[3];
183 q2[1] = q1[2]*q0[0] - q1[0]*q0[2] + q1[3]*q0[1] + q1[1]*q0[3];
184 q2[2] = q1[0]*q0[1] - q1[1]*q0[0] + q1[3]*q0[2] + q1[2]*q0[3];
185 q2[3] = q1[3]*q0[3] - q1[0]*q0[0] - q1[1]*q0[1] - q1[2]*q0[2];
193 if (fabs(fabs(q2[3] - 1.)) < 1.0e-7) {
206 theta2 = (float) acos (q2[3]);
207 sinTheta2 = (float) (1.0 / sin ((
double) theta2));
209 A[1] = q2[0] * sinTheta2;
210 A[2] = q2[1] * sinTheta2;
211 A[3] = q2[2] * sinTheta2;