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])),
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.
NaifVertex vertex(int v) const
Returns the vth point of the triangle.
SurfacePoint * point(const Latitude &lat, const Longitude &lon) const
Determine the intercept point of a lat/lon location for the plate.
Abstract interface to a TIN plate.
NaifVector normal() const
Compute the surface normal of the plate.
AbstractPlate * clone() const
Retrns a clone of the current plate.
Namespace for the standard library.
This class is designed to encapsulate the concept of a Latitude.
The distance is being specified in kilometers.
Distance minRadius() const
Gets the minimum radius.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
int m_plateId
ID for this plate on the ShapeModel.
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.
double kilometers() const
Get the distance in kilometers.
Distance measurement, usually in meters.
Angle separationAngle(const NaifVector &raydir) const
Computes the separation angle from the plate normal of a given vector.
TNT::Array1D< SpiceDouble > NaifVector
Namespace to contain type definitions of NAIF DSK fundamentals.
double area() const
Returns the area of the plate in km.
This class is designed to encapsulate the concept of a Longitude.
TNT::Array1D< SpiceDouble > NaifVertex
1-D Buffer[3]
Distance maxRadius() const
Determines the maximum radius from all the vertices of the plate.
#define _FILEINFO_
Macro for the filename and line number.
QString name() const
Gets the name of this Plate type.
Container for a intercept condition.
Intercept * intercept(const NaifVertex &vertex, const NaifVector &raydir) const
Conpute the intercept point on a triangular plate.
bool hasPoint(const Latitude &lat, const Longitude &lon) const
Determines the give lat/lon point intercept the triangular plate.
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.
void ToNaifArray(double naifOutput[3]) const
A naif array is a c-style array of size 3.
void FromNaifArray(const double naifValues[3])
A naif array is a c-style array of size 3.
Specification for an abstract triangular plate.
Namespace for ISIS/Bullet specific routines.
bool findPlateIntercept(const NaifVertex &obs, const NaifVector &raydir, NaifVertex &point) const
Determines of if given a vertex and look direction intercepts the plate.
Radians are generally used in mathematical equations, 0-2*PI is one circle, however these are more di...
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.