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
pltnp

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

     PLTNP ( Nearest point on triangular plate )

     SUBROUTINE PLTNP ( POINT, V1, V2, V3, PNEAR, DIST )

Abstract

     Find the nearest point on a triangular plate to a given point.

Required_Reading

     DSK

Keywords

     GEOMETRY
     MATH

Declarations

     IMPLICIT NONE

     DOUBLE PRECISION      POINT ( 3 )
     DOUBLE PRECISION      V1    ( 3 )
     DOUBLE PRECISION      V2    ( 3 )
     DOUBLE PRECISION      V3    ( 3 )
     DOUBLE PRECISION      PNEAR ( 3 )
     DOUBLE PRECISION      DIST

Brief_I/O

     VARIABLE  I/O  DESCRIPTION
     --------  ---  --------------------------------------------------
     POINT      I   A point in 3-dimensional space.
     V1,
     V2,
     V3         I   Vertices of a triangular plate.
     PNEAR      O   Nearest point on the plate to POINT.
     DIST       O   Distance between PNEAR and POINT.

Detailed_Input

     POINT    is an arbitrary point in 3-dimensional space.

     V1,
     V2,
     V3       are 3-vectors constituting the vertices of
              a triangular plate.

              The plate is allowed to be degenerate: it may
              consist of a line segment or of a single point.

Detailed_Output

     PNEAR    is the closest point on the plate to POINT.
              PNEAR is unique, since the plate is convex.

     DIST     is the distance between POINT and PNEAR.

Parameters

     None.

Exceptions

     1)  The input plate is allowed to be degenerate: it may be
         a line segment or a single point.

Files

     None.

Particulars

     None.

Examples

     The numerical results shown for this example may differ across
     platforms. The results depend on the SPICE kernels used as input
     (if any), the compiler and supporting libraries, and the machine
     specific arithmetic implementation.


     1) Find the nearest point to the point (2,2,2) on a plate having
        vertices at the unit basis vectors that lie along the positive
        X, Y, and Z coordinate axes.


        Example code begins here.


              PROGRAM PLTNP_EX1
              IMPLICIT NONE

        C
        C     Local parameters
        C
              CHARACTER*(*)         FMT1
              PARAMETER           ( FMT1 = '(A,3E15.7)' )
        C
        C     Local variables
        C
              DOUBLE PRECISION      DIST
              DOUBLE PRECISION      POINT  ( 3 )
              DOUBLE PRECISION      PNEAR  ( 3 )
              DOUBLE PRECISION      V1     ( 3 )
              DOUBLE PRECISION      V2     ( 3 )
              DOUBLE PRECISION      V3     ( 3 )

        C
        C     POINT is the input point.
        C
              CALL VPACK ( 2.D0, 2.D0, 2.D0, POINT )
        C
        C     V1, V2, V3 are the vertices of a plate.
        C
              CALL VPACK ( 1.D0, 0.D0, 0.D0, V1 )
              CALL VPACK ( 0.D0, 1.D0, 0.D0, V2 )
              CALL VPACK ( 0.D0, 0.D0, 1.D0, V3 )
        C
        C     Find the near point on the plate.
        C
              CALL PLTNP ( POINT, V1, V2, V3, PNEAR, DIST )

              WRITE (*,*) ' '
              WRITE (*,FMT1) 'Plate vertex 1 = ', V1
              WRITE (*,FMT1) 'Plate vertex 2 = ', V2
              WRITE (*,FMT1) 'Plate vertex 3 = ', V3
              WRITE (*,FMT1) 'Input point    = ', POINT
              WRITE (*,*)    ' '
              WRITE (*,FMT1) 'Near point     = ', PNEAR
              WRITE (*,FMT1) 'Distance       = ', DIST
              WRITE (*,*) ' '

              END


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


        Plate vertex 1 =   0.1000000E+01  0.0000000E+00  0.0000000E+00
        Plate vertex 2 =   0.0000000E+00  0.1000000E+01  0.0000000E+00
        Plate vertex 3 =   0.0000000E+00  0.0000000E+00  0.1000000E+01
        Input point    =   0.2000000E+01  0.2000000E+01  0.2000000E+01

        Near point     =   0.3333333E+00  0.3333333E+00  0.3333333E+00
        Distance       =   0.2886751E+01

Restrictions

     None.

Literature_References

     None.

Author_and_Institution

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

Version

    SPICELIB Version 1.1.3, 04-JUL-2021 (JDR)

        Edited the header to comply with NAIF standard.

        Edited code example output format for the solution to fit
        within the $Examples section without modifications. Added
        DSK to $Required_Readings.

    SPICELIB Version 1.1.2, 01-FEB-2016 (NJB)

        Added code example to header.

     DSKLIB Version 1.1.1, 19-MAR-2015 (NJB)

        Fixed spelling error in header.

     DSKLIB Version 1.1.0, 31-DEC-2014 (NJB)

        Bug fix: vertex indices for outside case, near
        point on 3rd edge were corrected.

     DSKLIB Version 1.0.0, 29-SEP-2014 (NJB)
Fri Dec 31 18:36:39 2021