1 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
3 Module: FGColumnVector3.cpp
4 Author: Originally by Tony Peden [formatted here by JSB]
6 Purpose: FGColumnVector3 class
9 ------------- Copyright (C) 1998 Tony Peden and Jon S. Berndt (jsb@hal-pc.org) -
11 This program is free software; you can redistribute it and/or modify it under
12 the terms of the GNU Lesser General Public License as published by the Free Software
13 Foundation; either version 2 of the License, or (at your option) any later
16 This program is distributed in the hope that it will be useful, but WITHOUT
17 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
21 You should have received a copy of the GNU Lesser General Public License along with
22 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
23 Place - Suite 330, Boston, MA 02111-1307, USA.
25 Further information about the GNU Lesser General Public License can also be found on
26 the world wide web at http://www.gnu.org.
28 FUNCTIONAL DESCRIPTION
29 --------------------------------------------------------------------------------
32 --------------------------------------------------------------------------------
34 03/16/2000 JSB Added exception throwing
36 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
40 #include "FGColumnVector3.h"
45 static const char *IdSrc = "$Id$";
46 static const char *IdHdr = ID_COLUMNVECTOR3;
48 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
50 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
52 FGColumnVector3::FGColumnVector3(void)
54 data[0] = data[1] = data[2] = 0.0;
58 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
60 string FGColumnVector3::Dump(string delimeter) const
63 sprintf(buffer, "%f%s%f%s%f", Entry(1), delimeter.c_str(), Entry(2), delimeter.c_str(), Entry(3));
64 return string(buffer);
67 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
69 ostream& operator<<(ostream& os, const FGColumnVector3& col)
71 os << col(1) << " , " << col(2) << " , " << col(3);
75 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
77 FGColumnVector3 FGColumnVector3::operator/(const double scalar) const
80 return operator*( 1.0/scalar );
82 cerr << "Attempt to divide by zero in method \
83 FGColumnVector3::operator/(const double scalar), \
84 object " << data[0] << " , " << data[1] << " , " << data[2] << endl;
85 return FGColumnVector3();
88 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
90 FGColumnVector3& FGColumnVector3::operator/=(const double scalar)
93 operator*=( 1.0/scalar );
95 cerr << "Attempt to divide by zero in method \
96 FGColumnVector3::operator/=(const double scalar), \
97 object " << data[0] << " , " << data[1] << " , " << data[2] << endl;
102 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
104 double FGColumnVector3::Magnitude(void) const
106 if (Entry(1) == 0.0 && Entry(2) == 0.0 && Entry(3) == 0.0)
109 return sqrt( Entry(1)*Entry(1) + Entry(2)*Entry(2) + Entry(3)*Entry(3) );
112 //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
114 FGColumnVector3& FGColumnVector3::Normalize(void)
116 double Mag = Magnitude();
119 operator*=( 1.0/Mag );
124 /*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/
125 // The bitmasked value choices are as follows:
126 // unset: In this case (the default) JSBSim would only print
127 // out the normally expected messages, essentially echoing
128 // the config files as they are read. If the environment
129 // variable is not set, debug_lvl is set to 1 internally
130 // 0: This requests JSBSim not to output any messages
132 // 1: This value explicity requests the normal JSBSim
134 // 2: This value asks for a message to be printed out when
135 // a class is instantiated
136 // 4: When this value is set, a message is displayed when a
137 // FGModel object executes its Run() method
138 // 8: When this value is set, various runtime state variables
139 // are printed out periodically
140 // 16: When set various parameters are sanity checked and
141 // a message is printed out when they go out of bounds
143 void FGColumnVector3::Debug(int from)
145 if (debug_lvl <= 0) return;
147 if (debug_lvl & 1) { // Standard console startup message output
149 if (debug_lvl & 2 ) { // Instantiation/Destruction notification
150 if (from == 0) cout << "Instantiated: FGColumnVector3" << endl;
151 if (from == 1) cout << "Destroyed: FGColumnVector3" << endl;
153 if (debug_lvl & 4 ) { // Run() method entry print for FGModel-derived objects
155 if (debug_lvl & 8 ) { // Runtime state variables
157 if (debug_lvl & 16) { // Sanity checking
159 if (debug_lvl & 64) {
160 if (from == 0) { // Constructor
161 cout << IdSrc << endl;
162 cout << IdHdr << endl;
167 } // namespace JSBSim