INCLUDES
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
#include "FGColumnVector3.h"
+#include <cstdio>
namespace JSBSim {
FGColumnVector3::FGColumnVector3(void)
{
- rowCtr = 1;
- data[0]=0; data[1]=0; data[2]=0; data[3]=0;
-
+ data[0] = data[1] = data[2] = 0.0;
Debug(0);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3::FGColumnVector3(double X, double Y, double Z)
+string FGColumnVector3::Dump(string delimeter) const
{
- rowCtr = 1;
- data[0] = 0; data[eX] = X; data[eY] = Y; data[eZ] = Z;
-
- Debug(0);
+ char buffer[256];
+ sprintf(buffer, "%f%s%f%s%f", Entry(1), delimeter.c_str(), Entry(2), delimeter.c_str(), Entry(3));
+ return string(buffer);
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3::~FGColumnVector3(void)
+FGColumnVector3 FGColumnVector3::operator/(const double scalar) const
{
- Debug(1);
-}
-
+ if (scalar != 0.0)
+ return operator*( 1.0/scalar );
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3::FGColumnVector3(const FGColumnVector3& b)
-{
- data[1] = b.data[1];
- data[2] = b.data[2];
- data[3] = b.data[3];
- rowCtr = 1;
-
- Debug(0);
+ cerr << "Attempt to divide by zero in method "
+ "FGColumnVector3::operator/(const double scalar), "
+ "object " << this << endl;
+ return FGColumnVector3();
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3 FGColumnVector3::operator=(const FGColumnVector3& b)
+FGColumnVector3& FGColumnVector3::operator/=(const double scalar)
{
- data[1] = b.data[1];
- data[2] = b.data[2];
- data[3] = b.data[3];
- rowCtr = 1;
+ if (scalar != 0.0)
+ operator*=( 1.0/scalar );
+ else
+ cerr << "Attempt to divide by zero in method "
+ "FGColumnVector3::operator/=(const double scalar), "
+ "object " << this << endl;
return *this;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3 FGColumnVector3::operator+(const FGColumnVector3& C)
-{
- FGColumnVector3 Sum;
- Sum(1) = C(1) + data[1];
- Sum(2) = C(2) + data[2];
- Sum(3) = C(3) + data[3];
-
- return Sum;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGColumnVector3::operator+=(const FGColumnVector3& C)
-{
- data[1] += C(1);
- data[2] += C(2);
- data[3] += C(3);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 FGColumnVector3::operator*(const double scalar)
-{
- FGColumnVector3 Product;
-
- Product(1) = scalar * data[1];
- Product(2) = scalar * data[2];
- Product(3) = scalar * data[3];
-
- return Product;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGColumnVector3::operator*=(const double scalar)
-{
- data[1] *= scalar;
- data[2] *= scalar;
- data[3] *= scalar;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 FGColumnVector3::operator-(const FGColumnVector3& V)
-{
-
- FGColumnVector3 Diff;
-
- Diff(1) = data[1] - V(1);
- Diff(2) = data[2] - V(2);
- Diff(3) = data[3] - V(3);
-
- return Diff;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGColumnVector3::operator-=(const FGColumnVector3& V)
-{
- data[1] -= V(1);
- data[2] -= V(2);
- data[3] -= V(3);
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 FGColumnVector3::operator/(const double scalar)
+double FGColumnVector3::Magnitude(void) const
{
- FGColumnVector3 Quotient;
-
- if (scalar != 0) {
- double tmp = 1.0/scalar;
- Quotient(1) = data[1] * tmp;
- Quotient(2) = data[2] * tmp;
- Quotient(3) = data[3] * tmp;
- } else {
- cerr << "Attempt to divide by zero in method FGColumnVector3::operator/(const double scalar), object " << this << endl;
- }
- return Quotient;
+ if (Entry(1) == 0.0 && Entry(2) == 0.0 && Entry(3) == 0.0)
+ return 0.0;
+ else
+ return sqrt( Entry(1)*Entry(1) + Entry(2)*Entry(2) + Entry(3)*Entry(3) );
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-void FGColumnVector3::operator/=(const double scalar)
-{
- FGColumnVector3 Quotient;
-
- if (scalar != 0) {
- double tmp = 1.0/scalar;
- data[1] *= tmp;
- data[2] *= tmp;
- data[3] *= tmp;
- } else {
- cerr << "Attempt to divide by zero in method FGColumnVector3::operator/=(const double scalar), object " << this << endl;
- }
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 operator*(const double scalar, const FGColumnVector3& C)
-{
- FGColumnVector3 Product;
-
- Product(1) = scalar * C(1);
- Product(2) = scalar * C(2);
- Product(3) = scalar * C(3);
-
- return Product;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-double FGColumnVector3::Magnitude(void)
-{
- double num;
-
- if ((data[1] == 0.00) &&
- (data[2] == 0.00) &&
- (data[3] == 0.00))
- {
- return 0.00;
- } else {
- num = data[1]*data[1];
- num += data[2]*data[2];
- num += data[3]*data[3];
- return sqrt(num);
- }
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 FGColumnVector3::Normalize(void)
+FGColumnVector3& FGColumnVector3::Normalize(void)
{
double Mag = Magnitude();
- if (Mag != 0) {
- Mag = 1.0/Mag;
- data[1] *= Mag;
- data[2] *= Mag;
- data[3] *= Mag;
- }
+ if (Mag != 0.0)
+ operator*=( 1.0/Mag );
return *this;
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-FGColumnVector3 FGColumnVector3::operator*(const FGColumnVector3& V)
-{
- FGColumnVector3 Product;
-
- Product(1) = data[2] * V(3) - data[3] * V(2);
- Product(2) = data[3] * V(1) - data[1] * V(3);
- Product(3) = data[1] * V(2) - data[2] * V(1);
-
- return Product;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-void FGColumnVector3::operator*=(const FGColumnVector3& V)
-{
- double a,b,c;
- a = data[1]; b=data[2]; c=data[3];
-
- data[1] = b * V(3) - c * V(2);
- data[2] = c * V(1) - a * V(3);
- data[3] = a * V(2) - b * V(1);
-
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3 FGColumnVector3::multElementWise(const FGColumnVector3& V)
+FGColumnVector3 FGColumnVector3::multElementWise(const FGColumnVector3& V) const
{
- FGColumnVector3 Product;
-
- Product(1) = data[1] * V(1);
- Product(2) = data[2] * V(2);
- Product(3) = data[3] * V(3);
-
- return Product;
+ return FGColumnVector3(Entry(1) * V(1), Entry(2) * V(2), Entry(3) * V(3));
}
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
{
os << col(1) << " , " << col(2) << " , " << col(3);
return os;
-}
-
-//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-FGColumnVector3& FGColumnVector3::operator<<(const double ff)
-{
- data[rowCtr] = ff;
- if (++rowCtr > 3 )
- rowCtr = 1;
- return *this;
}
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/