void inedpl_c ( SpiceDouble a,
ConstSpicePlane * plane,
SpiceEllipse * ellipse,
SpiceBoolean * found )
Find the intersection of a triaxial ellipsoid and a plane.
Variable I/O Description
-------- --- --------------------------------------------------
a I Length of ellipsoid semi-axis lying on the x-axis.
b I Length of ellipsoid semi-axis lying on the y-axis.
c I Length of ellipsoid semi-axis lying on the z-axis.
plane I Plane that intersects ellipsoid.
ellipse O Intersection ellipse, when found is SPICETRUE.
found O Flag indicating whether ellipse was found.
c are the lengths of the semi-axes of a triaxial
ellipsoid. The ellipsoid is centered at the
origin and oriented so that its axes lie on the
x, y and z axes. a, b, and c are the lengths of
the semi-axes that point in the x, y, and z
plane is a CSPICE plane.
ellipse is the CSPICE ellipse formed by the intersection
of the input plane and ellipsoid. ellipse will
represent a single point if the ellipsoid and
plane are tangent.
If the intersection of the ellipsoid and plane is
empty, ellipse is not modified.
found is SPICETRUE if and only if the intersection of the
ellipsoid and plane is non-empty.
1) If any of the lengths of the semi-axes of the input ellipsoid
are non-positive, the error SPICE(DEGENERATECASE) is
signalled. ellipse is not modified. found is set to SPICEFALSE.
2) If the input plane in invalid, the error will be diagnosed by
routines called by this routine. ellipse is not modified.
found is set to SPICEFALSE.
3) If the input plane and ellipsoid are very nearly tangent,
roundoff error may cause this routine to give unreliable
4) If the input plane and ellipsoid are precisely tangent, the
intersection is a single point. In this case, the output
ellipse is degenerate, but found will still have the value
SPICETRUE. You must decide whether this output makes sense for
An ellipsoid and a plane can intersect in an ellipse, a single
point, or the empty set.
1) Suppose we wish to find the limb of a body, as observed from
location loc in body-fixed coordinates. The CSPICE routine
edlimb_c solves this problem. Here's how inedpl_c is used in
We assume loc is outside of the body. The body is modelled as
a triaxial ellipsoid with semi-axes of length a, b, and c.
< x, y >
indicates the inner product of the vectors x and y.
The limb lies on the plane defined by
< x, n > = 1,
where the vector n is defined as
2 2 2
( loc / a , loc / b , loc / c )
n = loc / (a*a);
n = loc / (b*b);
n = loc / (c*c);
and the calls
nvc2pl_c ( n, 1.0, &plane );
inedpl_c ( a, b, c, &plane, &limb, &found );
el2cgv_c ( limb, center, smajor, sminor );
will return the center and semi-axes of the limb.
How do we know that < x, n > = 1 for all x on the limb?
This is because all limb points x satisfy
< loc - x, surfnm(x) > = 0,
where surfnm(x) is any surface normal at x. surfnm(x) is
parallel to the vector
2 2 2
v = ( x / a , x / b , x / c )
so we have
< loc - x, v > = 0,
< loc, v > = < x, v > = 1 (from the original
< x, n > = 1
where n is as defined above.
2) Suppose we wish to find the terminator of a body. We can
make a fair approximation to the location of the terminator
by finding the limb of the body as seen from the vertex of
the umbra; then the problem is essentially the same as in
example 1. Let VERTEX be this location. We make the
p = vertex / (a*a);
p = vertex / (b*b);
p = vertex / (c*c);
and then make the calls
nvc2pl_c ( p, 1.0, &plane );
inedpl_c ( a, b, c, &plane, &term, &found );
The CSPICE ellipse term represents the terminator of the
N.J. Bachman (JPL)
-CSPICE Version 1.0.5, 06-FEB-2003 (EDW)
Corrected a typo in the header documentation,
input variable 'ellipse' not 'ellips'
-CSPICE Version 1.0.0, 13-JUN-1999 (NJB)
intersection of ellipsoid and plane