47 SetVertex(1, vt0 + vt1);
48 SetVertex(2, vt0 + vt2);
49 SetVertex(3, vt0 + vt3);
55 double length1 = e1.
Mag();
56 double length2 = (GetVertex(2) - GetVertex(1)).Mag();
57 double length3 = (GetVertex(3) - GetVertex(2)).Mag();
58 double length4 = e3.
Mag();
65 normal1.
Dot(normal2) >= 0.9999999999);
75 UVector3 normal12 = fFacet1.GetSurfaceNormal() + fFacet2.GetSurfaceNormal();
79 fFacet1.SetSurfaceNormal(normal);
80 fFacet2.SetSurfaceNormal(normal);
83 fCircumcentre = GetVertex(0) + vtmp;
84 double radiusSqr = vtmp.
Mag2();
85 fRadius = std::sqrt(radiusSqr);
90 UWarning, 1,
"Length of sides of facet are too small or sides not planar.");
92 cerr <<
"P0 = " << GetVertex(0) << endl;
93 cerr <<
"P1 = " << GetVertex(1) << endl;
94 cerr <<
"P2 = " << GetVertex(2) << endl;
95 cerr <<
"P3 = " << GetVertex(3) << endl;
96 cerr <<
"Side lengths = P0->P1" << length1 << endl;
97 cerr <<
"Side lengths = P1->P2" << length2 << endl;
98 cerr <<
"Side lengths = P2->P3" << length3 << endl;
99 cerr <<
"Side lengths = P3->P0" << length4 << endl;
150 if (v1.
Mag2() < v2.
Mag2())
return v1;
182 for (
int i = 0; i <= 3; ++i)
185 if (sp > ss) ss =
sp;
192 bool intersect =
fFacet1.
Intersect(p, v, outgoing, distance, distFromSurface, normal);
193 if (!intersect) intersect =
fFacet2.
Intersect(p, v, outgoing, distance, distFromSurface, normal);
218 return "QuadrangularFacet";
virtual UGeometryType GetEntityType() const
static const double dirTolerance
UVector3 GetPointOnFace() const
UVector3 Distance(const UVector3 &p)
UVector3 GetSurfaceNormal() const
virtual ~UQuadrangularFacet()
UVector3 Cross(const UVector3 &) const
UQuadrangularFacet & operator=(const UQuadrangularFacet &right)
static double Tolerance()
static double normal(HepRandomEngine *eptr)
UQuadrangularFacet(const UVector3 &Pt0, const UVector3 &vt1, const UVector3 &vt2, const UVector3 &vt3, UFacetVertexType)
static const double kInfinity
double Extent(const UVector3 axis)
double Dot(const UVector3 &) const
void Exception(const char *originOfException, const char *exceptionCode, UExceptionSeverity severity, int level, const char *description)
void Set(double xx, double yy, double zz)
UVector3 GetPointOnFace() const
UVector3 GetVertex(int i) const
bool Intersect(const UVector3 &p, const UVector3 &v, const bool outgoing, double &distance, double &distFromSurface, UVector3 &normal)
UVector3 GetSurfaceNormal() const
double Random(double min=0.0, double max=1.0)
bool Intersect(const UVector3 &p, const UVector3 &v, const bool outgoing, double &distance, double &distFromSurface, UVector3 &normal)
UVector3 Distance(const UVector3 &p)