53 TriangularPlate::TriangularPlate(
const NaifTriangle &plate,
const int &plateId) :
55 m_plateId(plateId) { }
57 TriangularPlate::~TriangularPlate() { }
59 int TriangularPlate::id()
const {
64 return "TriangularPlate";
82 double radius = qMax(qMax(vnorm_c(
m_plate[0]), vnorm_c(
m_plate[1])),
87 Distance TriangularPlate::minRadius()
const {
88 double radius = qMin(qMin(vnorm_c(
m_plate[0]), vnorm_c(
m_plate[1])),
107 double s1 = vnorm_c(&edge[0]);
110 double s2 = vnorm_c(&edge[0]);
113 double s3 = vnorm_c(&edge[0]);
116 double S = (s1 + s2 + s3) / 2.0;
117 double p_area = std::sqrt(S * (S - s1) * (S - s2) * (S - s3));
142 ucrss_c(&edge1[0], &edge2[0], &norm[0]);
148 double third(0.33333333333333331);
173 double sepang = vsep_c(&norm[0], &raydir[0]);
228 vminus_c(&obs[0], &raydir[0]);
266 vminus_c(&obs[0], &raydir[0]);
325 if ( (v < 0) || (v > 2) ) {
326 QString msg =
"Unable to get TriangularPlate vertex for index ["
327 +
toString(v) +
"]. Valid index range is 0-2.";
330 for (
int i = 0 ; i < 3 ; i++ ) {
380 vsub_c(
m_plate[0], &obs[0], &e1[0]);
381 vsub_c(
m_plate[1], &obs[0], &e2[0]);
382 vsub_c(
m_plate[2], &obs[0], &e3[0]);
386 vcrss_c(&e1[0], &e2[0], &tnorm12[0]);
387 double tdot12 = vdot_c(&raydir[0], &tnorm12[0]);
388 double en = vdot_c(&e3[0], &tnorm12[0]);
392 if ( qFuzzyCompare(en+1.0, 1.0) )
return (
false);
395 if ( (en > 0.0) && (tdot12 < 0.0) )
return (
false);
396 if ( (en < 0.0) && (tdot12 > 0.0) )
return (
false);
401 vcrss_c(&e2[0], &e3[0], &tnorm23[0]);
402 double tdot23 = vdot_c(&raydir[0], &tnorm23[0]);
405 if ( (en > 0.0) && (tdot23 < 0.0) )
return (
false);
406 if ( (en < 0.0) && (tdot23 > 0.0) )
return (
false);
411 vcrss_c(&e3[0], &e1[0], &tnorm31[0]);
412 double tdot31 = vdot_c(&raydir[0], &tnorm31[0]);
415 if ( (en > 0.0) && (tdot31 < 0.0) )
return (
false);
416 if ( (en < 0.0) && (tdot31 > 0.0) )
return (
false);
420 double denom = tdot12 + tdot23 + tdot31;
428 if ( qFuzzyCompare(denom+1.0, 1.0) )
return (
false);
430 double scale = en / denom;
432 vlcom_c(1.0, &obs[0], scale, &raydir[0], &xpt[0]);
This class defines a body-fixed surface point.
NaifVector normal() const
Compute the surface normal of the plate.
Abstract interface to a TIN plate.
NaifVertex vertex(int v) const
Returns the vth point of the triangle.
This class is designed to encapsulate the concept of a Latitude.
The distance is being specified in kilometers.
bool findPlateIntercept(const NaifVertex &obs, const NaifVector &raydir, NaifVertex &point) const
Determines of if given a vertex and look direction intercepts the plate.
AbstractPlate * clone() const
Retrns a clone of the current plate.
QString name() const
Gets the name of this Plate type.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
int m_plateId
ID for this plate on the ShapeModel.
void ToNaifArray(double naifOutput[3]) const
A naif array is a c-style array of size 3.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
This error is for when a programmer made an API call that was illegal.
Distance measurement, usually in meters.
TNT::Array1D< SpiceDouble > NaifVector
Namespace to contain type definitions of NAIF DSK fundamentals.
Intercept * intercept(const NaifVertex &vertex, const NaifVector &raydir) const
Conpute the intercept point on a triangular plate.
SurfacePoint * point(const Latitude &lat, const Longitude &lon) const
Determine the intercept point of a lat/lon location for the plate.
This class is designed to encapsulate the concept of a Longitude.
TNT::Array1D< SpiceDouble > NaifVertex
1-D Buffer[3]
bool hasPoint(const Latitude &lat, const Longitude &lon) const
Determines the give lat/lon point intercept the triangular plate.
Distance maxRadius() const
Determines the maximum radius from all the vertices of the plate.
#define _FILEINFO_
Macro for the filename and line number.
Container for a intercept condition.
bool hasIntercept(const NaifVertex &vertex, const NaifVector &raydir) const
Determines if a look direction from a point intercepts the plate.
Defines an angle and provides unit conversions.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
double area() const
Returns the area of the plate in km.
void FromNaifArray(const double naifValues[3])
A naif array is a c-style array of size 3.
Specification for an abstract triangular plate.
double kilometers() const
Get the distance in kilometers.
Radians are generally used in mathematical equations, 0-2*PI is one circle, however these are more di...
Angle separationAngle(const NaifVector &raydir) const
Computes the separation angle from the plate normal of a given vector.
NaifTriangle m_plate
Tetrahedron, defined by the coordinate system origin and 3 vertices, used to represent the Triangular...
TNT::Array2D< SpiceDouble > NaifTriangle
3-D triangle[3][3]
Unless noted otherwise, the portions of Isis written by the USGS are public domain.