179 ww(W*W), xx(X*X), yy(Y*Y), zz(Z*Z), wx(W*X),
180 wy(W*Y), wz(W*Z), xy(X*Y), xz(X*Z), yz(Y*Z);
184 m(0,0) = ww + xx - yy - zz;
185 m(1,0) = 2.0*(xy + wz);
186 m(2,0) = 2.0*(xz - wy);
188 m(0,1) = 2.0*(xy - wz);
189 m(1,1) = ww - xx + yy - zz;
190 m(2,1) = 2.0*(yz + wx);
192 m(0,2) = 2.0*(xz + wy);
193 m(1,2) = 2.0*(yz - wx);
194 m(2,2) = ww - xx - yy + zz;
196 m(0,3) = m(1,3) = m(2,3) = m(3,0) = m(3,1) = m(3,2) = 0.0;
209 m(0,0) = W; m(0,1) = -X; m(0,2) = -Y; m(0,3) = -Z;
210 m(1,0) = X; m(1,1) = W; m(1,2) = -Z; m(1,3) = Y;
211 m(2,0) = Y; m(2,1) = Z; m(2,2) = W; m(2,3) = -X;
212 m(3,0) = Z; m(3,1) = -Y; m(3,2) = X; m(3,3) = W;
221 m(0,0) = W; m(0,1) = -X; m(0,2) = -Y; m(0,3) = -Z;
222 m(1,0) = X; m(1,1) = W; m(1,2) = Z; m(1,3) = -Y;
223 m(2,0) = Y; m(2,1) = -Z; m(2,2) = W; m(2,3) = X;
224 m(3,0) = Z; m(3,1) = Y; m(3,2) = -X; m(3,3) = W;
232 m(0,0) = W; m(0,1) = -X; m(0,2) = -Y; m(0,3) = -Z;
233 m(1,0) = X; m(1,1) = W; m(1,2) = Z; m(1,3) = -Y;
234 m(2,0) = Y; m(2,1) = -Z; m(2,2) = W; m(2,3) = X;
235 m(3,0) = Z; m(3,1) = Y; m(3,2) = -X; m(3,3) = W;
244 m(0,0) = W; m(0,1) = -X; m(0,2) = -Y; m(0,3) = -Z;
245 m(1,0) = X; m(1,1) = W; m(1,2) = -Z; m(1,3) = Y;
246 m(2,0) = Y; m(2,1) = Z; m(2,2) = W; m(2,3) = -X;
247 m(3,0) = Z; m(3,1) = -Y; m(3,2) = X; m(3,3) = W;
256 Scalar trace = _rot(0,0) + _rot(1,1) + _rot(2,2);
259 Scalar s = 0.5 / sqrt(trace + 1.0);
261 X = ( _rot(2,1) - _rot(1,2) ) * s;
262 Y = ( _rot(0,2) - _rot(2,0) ) * s;
263 Z = ( _rot(1,0) - _rot(0,1) ) * s;
267 if ( _rot(0,0) > _rot(1,1) && _rot(0,0) > _rot(2,2) )
269 Scalar s = 2.0 * sqrt( 1.0 + _rot(0,0) - _rot(1,1) - _rot(2,2));
270 W = (_rot(2,1) - _rot(1,2) ) / s;
272 Y = (_rot(0,1) + _rot(1,0) ) / s;
273 Z = (_rot(0,2) + _rot(2,0) ) / s;
276 if (_rot(1,1) > _rot(2,2))
278 Scalar s = 2.0 * sqrt( 1.0 + _rot(1,1) - _rot(0,0) - _rot(2,2));
279 W = (_rot(0,2) - _rot(2,0) ) / s;
280 X = (_rot(0,1) + _rot(1,0) ) / s;
282 Z = (_rot(1,2) + _rot(2,1) ) / s;
286 Scalar s = 2.0 * sqrt( 1.0 + _rot(2,2) - _rot(0,0) - _rot(1,1) );
287 W = (_rot(1,0) - _rot(0,1) ) / s;
288 X = (_rot(0,2) + _rot(2,0) ) / s;
289 Y = (_rot(1,2) + _rot(2,1) ) / s;