void srfrec_c ( SpiceInt body,
SpiceDouble longitude,
SpiceDouble latitude,
SpiceDouble rectan[3] )
Convert planetocentric latitude and longitude of a surface
point on a specified body to rectangular coordinates.
KERNEL
NAIF_IDS
CONVERSION
COORDINATES
TRANSFORMATION
Variable I/O Description
-------- --- --------------------------------------------------
body I NAIF integer code of an extended body.
longitude I Longitude of point in radians.
latitude I Latitude of point in radians.
rectan O Rectangular coordinates of the point.
body is the NAIF integer code of an extended body
on which a surface point of interest is located.
The body is modeled as a triaxial ellipsoid.
longitude Longitude of the input point. This is the angle between
the prime meridian and the meridian containing `rectan'.
The direction of increasing longitude is from the +X axis
towards the +Y axis.
Longitude is measured in radians. On input, the range
of longitude is unrestricted.
latitude Latitude of the input point. This is the angle from
the XY plane of the ray from the origin through the
point.
Latitude is measured in radians. On input, the range of
latitude is unrestricted.
rectan The rectangular coordinates of the input point. `rectan'
is a 3-vector.
Units are the same as those used to define the radii of
`body'. Normally, these units are km.
None.
1) If radii for `body' are not found in the kernel pool, the error
will be diagnosed by routines called by this routine.
2) If radii for `body' are invalid, the error will be diagnosed by
routines called by this routine. The radii should be
positive.
None.
This routine returns the rectangular coordinates of a surface
point on an extended body with known radii, where the location
of the surface point is specified in planetocentric latitudinal
coordinates.
Latitudinal coordinates are defined by a distance from a central
reference point, an angle from a reference meridian, and an angle
above the equator of a sphere centered at the central reference
point. In this case, the distance from the central reference
point is not required as an input because the fact that the
point is on the body's surface allows one to deduce this quantity.
Below are two tables that demonstrate by example the relationship
between rectangular and latitudinal coordinates.
Listed in the first table (under r, longitude and latitude ) are
latitudinal coordinate triples that approximately represent
points whose rectangular coordinates are taken from the set
{-1, 0, 1}. (Angular quantities are given in degrees.)
r longitude latitude rectan[0] rectan[1] rectan[2].
---------------------------- -------------------------------
0.0000 0.0000 0.0000 0.0000 0.0000 0.0000
1.0000 0.0000 0.0000 1.0000 0.0000 0.0000
1.0000 90.0000 0.0000 0.0000 1.0000 0.0000
1.0000 0.0000 90.0000 0.0000 0.0000 1.0000
1.0000 180.0000 0.0000 -1.0000 0.0000 0.0000
1.0000 -90.0000 0.0000 0.0000 -1.0000 0.0000
1.0000 0.0000 -90.0000 0.0000 0.0000 -1.0000
1.4142 45.0000 0.0000 1.0000 1.0000 0.0000
1.4142 0.0000 45.0000 1.0000 0.0000 1.0000
1.4142 90.0000 45.0000 0.0000 1.0000 1.0000
1.7320 45.0000 35.2643 1.0000 1.0000 1.0000
This routine is related to the CSPICE routine latrec_c, which
accepts a radius, longitude, and latitude as inputs and produces
equivalent rectangular coordinates as outputs.
1) Find the rectangular coordinates of the point
100 degrees planetocentric longitude
-35 degrees planetocentric latitude
on the Earth; then convert these coordinates back to
latitudinal coordinates. We should be able to recover
our original longitude and latitude values.
#include <stdio.h>
#include "SpiceUsr.h"
int main()
{
#define EARTH 399
SpiceDouble lat;
SpiceDouble lon;
SpiceDouble x [3];
SpiceDouble radius;
/.
Load the kernel pool with a PCK file that contains
values for the radii of the Earth.
./
furnsh_c ( "pck00008.tpc" );
/.
Find `x', the rectangular coordinates of the surface point
defined by `lat' and `long'. The NAIF integer code for
the Earth is 399. (See the NAIF_IDS required reading file
for the complete set of codes.)
./
lon = 100.0;
lat = -35.0;
printf ( "Original latitudinal coordinates:\n"
"\n"
"Longitude (deg): %f\n"
"Latitude (deg): %f\n",
lon,
lat );
/.
Convert angles to radians forr input to srfrec_c.
./
srfrec_c ( EARTH, lon*rpd_c(), lat*rpd_c(), x );
printf ( "\n"
"Rectangular coordinates:\n"
"\n"
"X (km): %24.16f\n"
"Y (km): %24.16f\n"
"Z (km): %25.16f\n",
x[0],
x[1],
x[2] );
/.
Now try to recover the original latitudinal coordinates
from the rectangular coordinates found by srfrec_c.
./
reclat_c ( x, &radius, &lon, &lat );
/.
Convert angles back to degree for display.
./
printf ( "\n"
"Latitudinal coordinates recovered from "
"rectangular coordinates:\n"
"\n"
"Longitude (deg): %f\n"
"Latitude (deg): %f\n"
"Radius (km): %f\n",
lon * dpr_c(),
lat * dpr_c(),
radius );
return ( 0 );
}
1) A SPICE text kernel containing the body radius definitions
required by this routine must be loaded into the kernel
pool prior to any calls to this routine.
None.
N.J. Bachman (JPL)
W.L. Taber (JPL)
-CSPICE Version 1.0.0, 03-NOV-2005 (NJB) (WLT)
convert bodyfixed latitudinal coordinates to rectangular
convert surface latitudinal coordinates to rectangular
surface point latitudinal coordinates to rectangular
Link to routine srfrec_c source file srfrec_c.c
|