invort_c

Index Page invort_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 invort_c ( ConstSpiceDouble   m  [3][3],
                       SpiceDouble        mit[3][3] )
#### Abstract
       Given a matrix, construct the matrix whose rows are the
       columns of the first divided by the length squared of the
       the corresponding columns of the input matrix.
#### Required_Reading
       None.
#### Keywords
       MATRIX
#### Brief_I/O
       Variable  I/O  Description
       --------  ---  --------------------------------------------------
       m          I   A 3x3 matrix.
       mit        I   m after transposition and scaling of rows.
#### Detailed_Input
       m          is a 3x3 matrix.
#### Detailed_Output
       mit        is the matrix obtained by transposing m and dividing
                  the rows by squares of their norms.
#### Parameters
       None.
#### Exceptions
       1) If any of the columns of m have zero length, the error
          SPICE(ZEROLENGTHCOLUMN) will be signaled.

       2) If any column is too short to allow computation of the
          reciprocal of its length without causing a floating
          point overflow, the error SPICE(COLUMNTOOSMALL) will
          be signalled.
#### Files
       None.
#### Particulars
       Suppose that m is the matrix

               -                      -
              |   A*u    B*v     C*w   |
              |      1      1       1  |
              |                        |
              |   A*u    B*v     C*w   |
              |      2      2       2  |
              |                        |
              |   A*u    B*v     C*w   |
              |      3      3       3  |
               -                      -

       where the vectors (u , u , u ),  (v , v , v ),  and (w , w , w )
                           1   2   3      1   2   3          1   2   3

       are unit vectors. This routine produces the matrix:

               -                      -
              |   a*u    a*u     a*u   |
              |      1      2       3  |
              |                        |
              |   b*v    b*v     b*v   |
              |      1      2       3  |
              |                        |
              |   c*w    c*w     c*w   |
              |      1      2       3  |
               -                      -

       where a = 1/A, b = 1/B, and c = 1/C.
#### Examples
       Suppose that you have a matrix m whose columns are orthogonal
       and have non-zero norm (but not necessarily norm 1).  Then the
       routine invort_c can be used to construct the inverse of m:

          #include "SpiceUsr.h"
               .
               .
               .
          invort_c ( m, invers );

       This method is numerically more robust than calling the
       routine invert_c.
#### Restrictions
       None.
#### Literature_References
       None.
#### Author_and_Institution
       W.L. Taber     (JPL)
       N.J. Bachman   (JPL)
#### Version
       -CSPICE Version 1.0.0, 02-JAN-2002 (WLT) (NJB)
#### Index_Entries
       Transpose a matrix and invert the lengths of the rows
       Invert a pseudo orthogonal matrix
#### Link to routine invort_c source file invort_c.c

    Thu Apr 16 08:58:22 2009