C+ C NAME: C quaternion_multiply C PURPOSE: C Multiply two quaternions C CATEGORY: C ucsd/gen/for/lib C CALLING SEQUENCE: subroutine quaternion_multiply(q1,q2,q) C INPUTS: C q1(4) double precision quaternion on the left of the multiplication C q2(4) double precision quaternion on the right of the multiplication C OUTPUTS: C q(4) double precision final quaternion C MODIFICATION HISTORY: C MAR-2003, Aaron Smith (UCSD/CASS) C NOV-2004, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C Changed order of quaternion components from C q0,qx,qy,qz to qx,qy,qz,q0 C- double precision q1(4) double precision q2(4) double precision q (4) double precision qq(4) qq(1) = q1(1)*q2(4) + q1(4)*q2(1) - q1(3)*q2(2) + q1(2)*q2(3) qq(2) = q1(2)*q2(4) + q1(3)*q2(1) + q1(4)*q2(2) - q1(1)*q2(3) qq(3) = q1(3)*q2(4) - q1(2)*q2(1) + q1(1)*q2(2) + q1(4)*q2(3) qq(4) = q1(4)*q2(4) - q1(1)*q2(1) - q1(2)*q2(2) - q1(3)*q2(3) q(1) = qq(1) q(2) = qq(2) q(3) = qq(3) q(4) = qq(4) return end