]> git.mxchange.org Git - flightgear.git/blob - src/FDM/JSBSim/FGColumnVector3.h
Fix for X-15 crash.
[flightgear.git] / src / FDM / JSBSim / FGColumnVector3.h
1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
3 Header: FGColumnVector3.h
4 Author: Originally by Tony Peden [formatted and adapted here by Jon Berndt]
5 Date started: Unknown
6
7 HISTORY
8 --------------------------------------------------------------------------------
9
10 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
11 SENTRY
12 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
13
14 #ifndef FGCOLUMNVECTOR3_H
15 #define FGCOLUMNVECTOR3_H
16
17 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
18 INCLUDES
19 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
20
21 #include <stdlib.h>
22 #ifdef FGFS
23 #  include <math.h>
24 #  include <simgear/compiler.h>
25 #  include STL_STRING
26 #  include STL_FSTREAM
27 #  include STL_IOSTREAM
28    SG_USING_STD(string);
29 #  if !defined(SG_HAVE_NATIVE_SGI_COMPILERS)
30      SG_USING_STD(ostream);
31      SG_USING_STD(istream);
32      SG_USING_STD(cerr);
33      SG_USING_STD(cout);
34      SG_USING_STD(endl);
35 #  endif
36 #else
37 #  include <string>
38 #  if defined(sgi) && !defined(__GNUC__)
39 #    include <fstream.h>
40 #    include <math.h>
41 #    include <iostream.h>
42 #  else
43 #    include <fstream>
44 #    include <cmath>
45 #    include <iostream>
46      using std::ostream;
47      using std::istream;
48      using std::cerr;
49      using std::cout;
50      using std::endl;
51 #  endif
52    using std::string;
53 #endif
54
55 #include "FGJSBBase.h"
56
57 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
58 DEFINITIONS
59 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
60
61 #define ID_COLUMNVECTOR3 "$Id$"
62
63 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
64 FORWARD DECLARATIONS
65 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
66
67 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68 DECLARATION: FGColumnVector3
69 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
70
71 class FGColumnVector3 : public FGJSBBase
72 {
73 public:
74   FGColumnVector3(void);
75   FGColumnVector3(double X, double Y, double Z);
76   FGColumnVector3(const FGColumnVector3& b);
77   ~FGColumnVector3(void);
78   
79   FGColumnVector3 operator=(const FGColumnVector3& b);
80   
81   FGColumnVector3 operator*(const double scalar);
82   FGColumnVector3 operator*(const FGColumnVector3& V);   // Cross product operator
83   FGColumnVector3 operator/(const double scalar);
84   FGColumnVector3 operator+(const FGColumnVector3& B); // must not return reference
85   FGColumnVector3 operator-(const FGColumnVector3& B);
86   
87   void operator-=(const FGColumnVector3 &B);
88   void operator+=(const FGColumnVector3 &B);
89   void operator*=(const FGColumnVector3 &B);
90   void operator*=(const double scalar);
91   void operator/=(const double scalar);
92
93   FGColumnVector3& operator<<(const double ff);
94
95   inline void InitMatrix(void) { data[1]=0; data[2]=0; data[3]=0; }
96   inline void InitMatrix(double ff) { data[1]=ff; data[2]=ff; data[3]=ff; }
97
98   double Magnitude(void);
99   FGColumnVector3 Normalize(void);
100
101   friend FGColumnVector3 operator*(const double scalar, const FGColumnVector3& A);
102
103   friend ostream& operator<<(ostream& os, const FGColumnVector3& col);
104
105   inline double operator()(int m) const { return data[m]; }
106   inline double& operator()(int m) { return data[m]; }
107
108   FGColumnVector3 multElementWise(const FGColumnVector3& V);
109
110 private:
111   double data[4];
112   int rowCtr;
113   void Debug(int from);
114 };
115
116 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
117 #endif