Index Page dvhat_c
A B C D E F G H I J K L M N O P Q R S T U V W X
Procedure Abstract Required_Reading Keywords Brief_I/O Detailed_Input | Detailed_Output Parameters Exceptions Files Particulars Examples | Restrictions Literature_References Author_and_Institution Version Index_Entries
#### Procedure
       void dvhat_c ( ConstSpiceDouble s1  [6],
                      SpiceDouble      sout[6] )
#### Abstract
       Find the unit vector corresponding to a state vector and the
       derivative of the unit vector.
#### Required_Reading
       None.
#### Keywords
       VECTOR
       DERIVATIVE
       MATH
#### Brief_I/O
       VARIABLE  I/O  DESCRIPTION
       --------  ---  --------------------------------------------------
       s1        I     State to be normalized.
       sout      O     Unit vector s1 / |s1|, and its time derivative.
#### Detailed_Input
       s1       This is any double precision state. If the position
                component of the state is the zero vector, this routine
                will detect it and will not attempt to divide by zero.
#### Detailed_Output
       sout     sout is a state containing the unit vector pointing in
                the direction of position component of s1 and the
                derivative of the unit vector with respect to time.

                sout may overwrite s1.
#### Parameters
       None.
#### Exceptions
       Error free.

       1) If s1 represents the zero vector, then the position
          component of sout will also be the zero vector.  The
          velocity component will be the velocity component
          of s1.
#### Files
       None.
#### Particulars
       Let s1 be a state vector with position and velocity components p
       and v respectively.  From these components one can compute the
       unit vector parallel to p, call it u and the derivative of u
       with respect to time, du.  This pair (u,du) is the state returned
       by this routine in sout.
#### Examples
       Any numerical results shown for this example may differ between
       platforms as the results depend on the SPICE kernels used as input
       and the machine specific arithmetic implementation.

       Suppose that 'state' gives the apparent state of a body with
       respect to an observer.  This routine can be used to compute the
       instantaneous angular rate of the object across the sky as seen
       from the observers vantage.

          #include "SpiceUsr.h"
          #include <stdio.h>
          #include <math.h>

          int main()
             {

             SpiceDouble       et;
             SpiceDouble       ltime;
             SpiceDouble       omega;
             SpiceDouble       state  [6];
             SpiceDouble       ustate [6];

             SpiceChar       * epoch  = "Jan 1 2009";
             SpiceChar       * target = "MOON";
             SpiceChar       * frame  = "J2000";
             SpiceChar       * abcorr = "LT+S";
             SpiceChar       * obsrvr = "EARTH BARYCENTER";

             /.
             Load SPK, PCK, and LSK kernels, use a meta kernel for convenience.
             ./
             furnsh_c ( "standard.tm" );

             /.
             Define an arbitrary epoch, convert the epoch to ephemeris time.
             ./
             str2et_c ( epoch, &et );

             /.
             Calculate the state of the moon with respect to the earth-moon
             barycenter in J2000, corrected for light time and stellar aberration
             at ET.
             ./

             spkezr_c ( target, et, frame, abcorr, obsrvr, state, &ltime );

             /.
             Calculate the unit vector of STATE and the derivative of the
             unit vector.
             ./
             dvhat_c ( state, ustate );

             /.
             Calculate the instantaneous angular velocity from the magnitude of the
             derivative of the unit vector.

                v = r x omega

                 ||omega|| = ||v||  for  r . v = 0
                             -----
                             ||r||

                 ||omega|| = ||v||  for  ||r|| = 1
             ./
             omega = vnorm_c( &ustate[3] );

             printf( "Instantaneous angular velocity, rad/sec %.10g\n", omega );

             return 0;
             }

       The program outputs:

          Instantaneous angular velocity, rad/sec 2.48106658e-06
#### Restrictions
       None.
#### Literature_References
         None.
#### Author_and_Institution
         W.L. Taber      (JPL)
         E.D. Wright     (JPL)
#### Version
       -CSPICE Version 1.0.1, 06-MAY-2010  (EDW)

          Reordered header sections to proper NAIF convention.
          Minor edit to code comments eliminating typo.

       -CSPICE Version 1.0.0, 07-JUL-1999  (EDW)
#### Index_Entries
       State of a unit vector parallel to a state vector
#### Link to routine dvhat_c source file dvhat_c.c

    Wed Jun  9 13:05:21 2010