40 #ifndef __MO_MATH_VECTOR_H__ 41 #define __MO_MATH_VECTOR_H__ 61 m_afTuple[0] = afTuple[0];
62 m_afTuple[1] = afTuple[1];
73 inline operator const Real* ()
const {
return m_afTuple; }
74 inline operator Real* () {
return m_afTuple; }
75 inline Real operator[] (
int i)
const {
return m_afTuple[i]; }
76 inline Real& operator[] (
int i) {
return m_afTuple[i]; }
77 inline Real
X ()
const {
return m_afTuple[0]; }
78 inline Real&
X () {
return m_afTuple[0]; }
79 inline Real
Y ()
const {
return m_afTuple[1]; }
80 inline Real&
Y () {
return m_afTuple[1]; }
115 if (fScalar != (Real)0.0)
117 Real fInvScalar = ((Real)1.0)/fScalar;
118 kQuot.
m_afTuple[0] = fInvScalar*m_afTuple[0];
119 kQuot.
m_afTuple[1] = fInvScalar*m_afTuple[1];
149 m_afTuple[0] *= fScalar;
150 m_afTuple[1] *= fScalar;
154 if (fScalar != (Real)0.0)
156 Real fInvScalar = ((Real)1.0)/fScalar;
157 m_afTuple[0] *= fInvScalar;
158 m_afTuple[1] *= fInvScalar;
174 return m_afTuple[0]*m_afTuple[0] + m_afTuple[1]*m_afTuple[1];
180 Real fLength = Length();
184 Real fInvLength = ((Real)1.0)/fLength;
185 m_afTuple[0] *= fInvLength;
186 m_afTuple[1] *= fInvLength;
191 m_afTuple[0] = (Real)0.0;
192 m_afTuple[1] = (Real)0.0;
206 moVector2 kPerp(m_afTuple[1],-m_afTuple[0]);
219 const moVector2& rkV2, Real afBary[3])
const {
232 Real fMax = (Real)0.0;
234 for (i = 0; i < 2; i++)
236 for (
int j = 0; j < 2; j++)
247 if (fMax > (Real)1.0)
249 Real fInvMax = ((Real)1.0)/fMax;
250 for (i = 0; i < 3; i++)
252 akDiff[i] *= fInvMax;
256 Real fDet = akDiff[0].
DotPerp(akDiff[1]);
259 Real fInvDet = ((Real)1.0)/fDet;
260 afBary[0] = akDiff[2].
DotPerp(akDiff[1])*fInvDet;
261 afBary[1] = akDiff[0].
DotPerp(akDiff[2])*fInvDet;
262 afBary[2] = (Real)1.0 - afBary[0] - afBary[1];
272 if (fSqrLength > fMaxSqrLength)
275 fMaxSqrLength = fSqrLength;
278 if (fSqrLength > fMaxSqrLength)
281 fMaxSqrLength = fSqrLength;
286 Real fInvSqrLength = ((Real)1.0)/fMaxSqrLength;
290 afBary[0] = akDiff[2].
Dot(akDiff[0])*fInvSqrLength;
291 afBary[1] = (Real)0.0;
292 afBary[2] = (Real)1.0 - afBary[0];
294 else if (iMaxIndex == 1)
297 afBary[0] = (Real)0.0;
298 afBary[1] = akDiff[2].
Dot(akDiff[1])*fInvSqrLength;
299 afBary[2] = (Real)1.0 - afBary[1];
304 akDiff[2] = *
this - rkV1;
305 afBary[0] = akDiff[2].
Dot(kE2)*fInvSqrLength;
306 afBary[1] = (Real)1.0 - afBary[0];
307 afBary[2] = (Real)0.0;
313 afBary[0] = ((Real)1.0)/(Real)3.0;
314 afBary[1] = afBary[0];
315 afBary[2] = afBary[0];
339 Real fDot0 = rkU.
Dot(rkV);
357 if (!(iVQuantity > 0 && akPoint))
return;
361 for (
int i = 1; i < iVQuantity; i++)
364 for (
int j = 0; j < 2; j++)
366 if (rkPoint[j] < rkMin[j])
368 rkMin[j] = rkPoint[j];
370 else if (rkPoint[j] > rkMax[j])
372 rkMax[j] = rkPoint[j];
382 if ((0 < l) && (0 < lv))
return Dot(rkV) / (l * lv);
400 return memcmp(m_afTuple,rkV.
m_afTuple,2*
sizeof(Real));
408 template <
class Real>
419 #endif // MO_RASPBIAN static const moVector2 ZERO
bool operator>(const TiXmlString &a, const TiXmlString &b)
Real Cosine(const moVector2< Real > &rkV)
moVector2(Real fX, Real fY)
static void ComputeExtremes(int iVQuantity, const moVector2 *akPoint, moVector2 &rkMin, moVector2 &rkMax)
bool operator<(const TiXmlString &a, const TiXmlString &b)
static Real ACos(Real fValue)
static void Orthonormalize(moVector2 &rkU, moVector2 &rkV)
moVector2 UnitPerp() const
returns (y,-x)/sqrt(x*x+y*y)
Clase base abstracta de donde deben derivar los objetos [virtual pura].
moVector2< MOfloat > moVector2f
static const moVector2 UNIT_Y
moDeclareExportedDynamicArray(moVector2i, moVector2iArray)
int CompareArrays(const moVector2 &rkV) const
static Real Sqrt(Real fValue)
static const moVector2 ONE
Real Dot(const moVector2 &rkV) const
LIBMOLDEO_API moText0 operator+(const moText0 &txt1, const moText0 &txt2)
moVector2 Perp() const
returns (y,-x)
bool operator==(const TiXmlString &a, const TiXmlString &b)
void GetBarycentrics(const moVector2 &rkV0, const moVector2 &rkV1, const moVector2 &rkV2, Real afBary[3]) const
moVector2< MOlong > moVector2i
bool operator>=(const TiXmlString &a, const TiXmlString &b)
moVector2< MOdouble > moVector2d
static const moVector2 UNIT_X
bool operator!=(const TiXmlString &a, const TiXmlString &b)
Real SquaredLength() const
moVector2(const Real *afTuple)
moVector2< Real > operator*(Real fScalar, const moVector2< Real > &rkV)
Real Angle(const moVector2< Real > &rkV)
Real DotPerp(const moVector2 &rkV) const
returns DotPerp((x,y),(V.x,V.y)) = x*V.y - y*V.x
static void GenerateOrthonormalBasis(moVector2 &rkU, moVector2 &rkV)
bool operator<=(const TiXmlString &a, const TiXmlString &b)
static Real FAbs(Real fValue)
moVector2(const moVector2 &rkV)