void inedpl_c ( SpiceDouble a,
SpiceDouble b,
SpiceDouble c,
ConstSpicePlane * plane,
SpiceEllipse * ellipse,
SpiceBoolean * found )
Find the intersection of a triaxial ellipsoid and a plane.
ELLIPSES
PLANES
ELLIPSE
ELLIPSOID
GEOMETRY
MATH
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.
a,
b,
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
directions respectively.
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.
None.
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
results.
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
your application.
None.
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
that solution.
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.
The notation
< 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[0] / a , loc[1] / b , loc[2] / c )
The assignments
n[0] = loc[0] / (a*a);
n[1] = loc[1] / (b*b);
n[2] = loc[2] / (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[0] / a , x[1] / b , x[2] / c )
so we have
< loc - x, v > = 0,
< loc, v > = < x, v > = 1 (from the original
ellipsoid
equation)
and finally
< 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
assignments
p[0] = vertex[0] / (a*a);
p[1] = vertex[1] / (b*b);
p[2] = vertex[2] / (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
body.
None.
None.
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
Link to routine inedpl_c source file inedpl_c.c
|