Index of Functions: A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X 
Index Page
el2cgv

Table of contents
Procedure
Abstract
Required_Reading
Keywords
Declarations
Brief_I/O
Detailed_Input
Detailed_Output
Parameters
Exceptions
Files
Particulars
Examples
Restrictions
Literature_References
Author_and_Institution
Version

Procedure

     EL2CGV ( Ellipse to center and generating vectors )

     SUBROUTINE EL2CGV ( ELLIPS, CENTER, SMAJOR, SMINOR )

Abstract

     Convert a SPICE ellipse to a center vector and two generating
     vectors. The selected generating vectors are semi-axes of the
     ellipse.

Required_Reading

     ELLIPSES

Keywords

     ELLIPSE
     GEOMETRY

Declarations

     IMPLICIT NONE

     INTEGER               UBEL
     PARAMETER           ( UBEL    =   9 )

     DOUBLE PRECISION      ELLIPS ( UBEL )
     DOUBLE PRECISION      CENTER (    3 )
     DOUBLE PRECISION      SMAJOR (    3 )
     DOUBLE PRECISION      SMINOR (    3 )

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     ELLIPS     I   A SPICE ellipse.
     CENTER,
     SMAJOR,
     SMINOR     O   Center and semi-axes of ELLIPS.

Detailed_Input

     ELLIPS   is a SPICE ellipse.

Detailed_Output

     CENTER,
     SMAJOR,
     SMINOR   are, respectively, a center vector, a semi-major
              axis vector, and a semi-minor axis vector that
              generate the input ellipse. This ellipse is the
              set of points

                 CENTER + cos(theta) SMAJOR + sin(theta) SMINOR

              where theta ranges over the interval (-pi, pi].

Parameters

     None.

Exceptions

     Error free.

Files

     None.

Particulars

     SPICE ellipses serve to simplify calling sequences and reduce
     the chance for error in declaring and describing argument lists
     involving ellipses.

     The set of ellipse conversion routines is

        CGV2EL ( Center and generating vectors to ellipse )
        EL2CGV ( Ellipse to center and generating vectors )

     A word about the output of this routine: the semi-major axis of
     an ellipse is a vector of largest possible magnitude in the set

        cos(theta) VEC1  +  sin(theta) VEC2,

     where theta is in the interval (-pi, pi].  There are two such
     vectors; they are additive inverses of each other. The semi-minor
     axis is an analogous vector of smallest possible magnitude. The
     semi-major and semi-minor axes are orthogonal to each other. If
     SMAJOR and SMINOR are choices of semi-major and semi-minor axes,
     then the input ellipse can also be represented as the set of
     points


        CENTER + cos(theta) SMAJOR + sin(theta) SMINOR

     where theta ranges over the interval (-pi, pi].

Examples

     The numerical results shown for these examples may differ across
     platforms. The results depend on the SPICE kernels used as
     input, the compiler and supporting libraries, and the machine
     specific arithmetic implementation.

     1) Given a SPICE ellipse structure, extract its components into
        independent variables.


        Example code begins here.


              PROGRAM EL2CGV_EX1
              IMPLICIT NONE

        C
        C     Local constants.
        C
              INTEGER                 UBEL
              PARAMETER             ( UBEL =   9 )

        C
        C     Local variables.
        C
              DOUBLE PRECISION        CENTER ( 3    )
              DOUBLE PRECISION        ECENTR ( 3    )
              DOUBLE PRECISION        ELLIPS ( UBEL )
              DOUBLE PRECISION        SMAJOR ( 3    )
              DOUBLE PRECISION        SMINOR ( 3    )
              DOUBLE PRECISION        VEC1   ( 3    )
              DOUBLE PRECISION        VEC2   ( 3    )

              INTEGER                 I

        C
        C     Define the center and two linearly independent
        C     generating vectors of an ellipse (the vectors need not
        C     be linearly independent).
        C
              DATA                    CENTER / -1.D0,  1.D0, -1.D0 /

              DATA                    VEC1   /  1.D0,  1.D0,  1.D0 /

              DATA                    VEC2   /  1.D0, -1.D0,  1.D0 /

        C
        C     Create the ELLIPS.
        C
              CALL CGV2EL ( CENTER, VEC1, VEC2, ELLIPS )

        C
        C     In a real application, please use SPICELIB API EL2CGV
        C     to retrieve the center and generating vectors from the
        C     ellipse structure (see next block).
        C
              WRITE(*,'(A)') 'SPICE ellipse:'
              WRITE(*,'(A,3F10.6)') '   Semi-minor axis:',
             .                                    ( ELLIPS(I), I=7,9 )
              WRITE(*,'(A,3F10.6)') '   Semi-major axis:',
             .                                    ( ELLIPS(I), I=4,6 )
              WRITE(*,'(A,3F10.6)') '   Center         :',
             .                                    ( ELLIPS(I), I=1,3 )
              WRITE(*,*) ' '

        C
        C     Obtain the center and generating vectors from the
        C     ELLIPS.
        C
              CALL EL2CGV ( ELLIPS, ECENTR, SMAJOR, SMINOR )

              WRITE(*,'(A)') 'SPICE ellipse (using EL2CGV):'
              WRITE(*,'(A,3F10.6)') '   Semi-minor axis:', SMINOR
              WRITE(*,'(A,3F10.6)') '   Semi-major axis:', SMAJOR
              WRITE(*,'(A,3F10.6)') '   Center         :', ECENTR

              END


        When this program was executed on a Mac/Intel/gfortran/64-bit
        platform, the output was:


        SPICE ellipse:
           Semi-minor axis:  0.000000  1.414214  0.000000
           Semi-major axis:  1.414214 -0.000000  1.414214
           Center         : -1.000000  1.000000 -1.000000

        SPICE ellipse (using EL2CGV):
           Semi-minor axis:  0.000000  1.414214  0.000000
           Semi-major axis:  1.414214 -0.000000  1.414214
           Center         : -1.000000  1.000000 -1.000000


     2) Given an ellipsoid and a viewpoint exterior to it, calculate
        the limb ellipse as seen from that viewpoint.


        Example code begins here.


              PROGRAM EL2CGV_EX2
              IMPLICIT NONE

        C
        C     Local constants.
        C
              INTEGER                 UBEL
              PARAMETER             ( UBEL =   9 )

        C
        C     Local variables.
        C
              DOUBLE PRECISION        A
              DOUBLE PRECISION        B
              DOUBLE PRECISION        C
              DOUBLE PRECISION        ECENTR ( 3    )
              DOUBLE PRECISION        LIMB   ( UBEL )
              DOUBLE PRECISION        SMAJOR ( 3    )
              DOUBLE PRECISION        SMINOR ( 3    )
              DOUBLE PRECISION        VIEWPT ( 3    )

        C
        C     Define a viewpoint exterior to the ellipsoid.
        C
              DATA                    VIEWPT /  2.D0,  0.D0,  0.D0 /

        C
        C     Define an ellipsoid.
        C
              A = SQRT( 2.D0 )
              B = 2.D0 * SQRT( 2.D0 )
              C = SQRT( 2.D0 )

        C
        C     Calculate the limb ellipse as seen by from the
        C     viewpoint.
        C
              CALL EDLIMB ( A, B, C, VIEWPT, LIMB )

        C
        C     Output the structure components.
        C
              CALL EL2CGV ( LIMB, ECENTR, SMAJOR, SMINOR )

              WRITE(*,'(A)') 'Limb ellipse as seen from viewpoint:'
              WRITE(*,'(A,3F11.6)') '   Semi-minor axis:', SMINOR
              WRITE(*,'(A,3F11.6)') '   Semi-major axis:', SMAJOR
              WRITE(*,'(A,3F11.6)') '   Center         :', ECENTR

              END


        When this program was executed on a Mac/Intel/gfortran/64-bit
        platform, the output was:


        Limb ellipse as seen from viewpoint:
           Semi-minor axis:   0.000000   0.000000  -1.000000
           Semi-major axis:   0.000000   2.000000  -0.000000
           Center         :   1.000000   0.000000   0.000000

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

     N.J. Bachman       (JPL)
     J. Diaz del Rio    (ODC Space)
     W.L. Taber         (JPL)

Version

    SPICELIB Version 1.1.0, 24-AUG-2021 (JDR)

        Added IMPLICIT NONE statement.

        Edited the header to comply with NAIF standard.
        Added complete code example.

    SPICELIB Version 1.0.1, 10-MAR-1992 (WLT)

        Comment section for permuted index source lines was added
        following the header.

    SPICELIB Version 1.0.0, 02-NOV-1990 (NJB)
Fri Dec 31 18:36:20 2021