C+ C NAME: C quaternion_rotate_angles C PURPOSE: C Convert vector specified in rectangular coordinates from old C to new coordinate system. C Rotate unit vector specified in spherical coordinates C CATEGORY: C ucsd/gen/for/lib C CALLING SEQUENCE: subroutine quaternion_rotate_angles(q,phi,lat) C CALLS: C dcosd,dsind,dasind,datan2d C INPUTS: C q(4) double precision quaternion by which rotation is to be performed C phi double precision phase angle in degrees C lat double precision latitude in degrees C OUTPUTS: C phi double precision phase angle in degrees C lat double precision latitude in degrees C CALLS: C quaternion_rotate_xyz C PROCEDURE: C Quaternion is converted to rotation matrix. C MODIFICATION HISTORY: C MAR-2003, Aaron Smith (UCSD/CASS) C NOV-2003, Paul Hick (UCSD/CASS; pphick@ucsd.edu) C Introduced call to quaternion_rotate_xyz C- double precision q(4) double precision phi double precision lat double precision x double precision y double precision z double precision dcosd ! Needed for GNU compiler double precision dsind double precision datan2d double precision dasind x = dcosd(lat)*dcosd(phi) ! Spherical to rectangular y = dcosd(lat)*dsind(phi) z = dsind(lat) ! (x,y,z) is unit vector call quaternion_rotate_xyz(q,x,y,z) phi = datan2d(y,x) ! Range [-180,180] phi = dmod(phi+360.0d0,360.0d0) ! Range [0,360) z = max(-1.0d0,min(z,1.0d0)) ! Safety belt lat = dasind(z) return end