Main Page   Packages   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Search  

C:/temp/src/j2k/Beta/Math/Vector/NotDone/Vector4D.cc

Go to the documentation of this file.
00001 #ifndef __J2K__VECTOR4D_CC__
00002 #define __J2K__VECTOR4D_CC__
00003 
00004 Vector4D::Vector4D()
00005   : X( 0.0 ), Y( 0.0 ), Z( 0.0 ), T( 0.0 ) { }
00006 
00007 Vector4D::Vector4D( const double x, const double y,
00008                     const double z, const double t )
00009   : X( x ), Y( y ), Z( z ), T( t ) { }
00010 
00011 Vector4D::Vector4D( const Vector4D& v )
00012   : X( v.X ), Y( v.Y ), Z( v.Z ), T( v.T ) { }
00013 
00014 BOOL Vector4D::Compare( const Vector4D& v ) const {
00015   if (v.X != X)  return FALSE;
00016   if (v.Y != Y)  return FALSE;
00017   if (v.Z != Z)  return FALSE;
00018   if (v.T != T)  return FALSE;
00019 
00020   return TRUE;
00021 }
00022 
00023 inline BOOL Vector4D::operator==( const Vector4D& v ) const {
00024   return Compare( v );
00025 }
00026 
00027 inline BOOL Vector4D::operator!=( const Vector4D& v ) const {
00028   return !Compare( v );
00029 }
00030 
00031 Vector4D operator+( const Vector4D& v1, const Vector4D& v2 ) {
00032   return Vector4D( v1.X + v2.X, v1.Y + v2.Y, v1.Z + v2.Z, v1.T + v2.T );
00033 }
00034 
00035 Vector4D operator-( const Vector4D& v1, const Vector4D& v2 ) {
00036   return Vector4D( v1.X - v2.X, v1.Y - v2.Y, v1.Z - v2.Z, v1.T - v2.T );
00037 }
00038 
00039 Vector4D operator*( const Vector4D& v1, const Vector4D& v2 ) {
00040   return Vector4D( v1.X * v2.X, v1.Y * v2.Y, v1.Z * v2.Z, v1.T * v2.T );
00041 }
00042 
00043 Vector4D operator/( const Vector4D& v1, const Vector4D& v2 ) {
00044   return Vector4D( v1.X / v2.X, v1.Y / v2.Y, v1.Z / v2.Z, v1.T / v2.T );
00045 }
00046 
00047 Vector4D operator+( const Vector4D& v, const double r ) {
00048   return Vector4D( v.X + r, v.Y + r, v.Z + r, v.T + r );
00049 }
00050 
00051 Vector4D operator-( const Vector4D& v, const double r ) {
00052   return Vector4D( v.X - r, v.Y - r, v.Z - r, v.T - r );
00053 }
00054 
00055 Vector4D operator*( const Vector4D& v, const double r ) {
00056   return Vector4D( v.X * r, v.Y * r, v.Z * r, v.T * r );
00057 }
00058 
00059 Vector4D operator/( const Vector4D& v, const double r ) {
00060   return Vector4D( v.X / r, v.Y / r, v.Z / r, v.T / r );
00061 }
00062 
00063 void Vector4D::operator+=( const Vector4D& v ) {
00064   X += v.X;
00065   Y += v.Y;
00066   Z += v.Z;
00067   T += v.T;
00068 }
00069 
00070 void Vector4D::operator-=( const Vector4D& v ) {
00071   X -= v.X;
00072   Y -= v.Y;
00073   Z -= v.Z;
00074   T -= v.T;
00075 }
00076 
00077 void Vector4D::operator*=( const Vector4D& v ) {
00078   X *= v.X;
00079   Y *= v.Y;
00080   Z *= v.Z;
00081   T *= v.T;
00082 }
00083 
00084 void Vector4D::operator/=( const Vector4D& v ) {
00085   X /= v.X;
00086   Y /= v.Y;
00087   Z /= v.Z;
00088   T /= v.T;
00089 }
00090 
00091 void Vector4D::operator+=( const double r ) {
00092   X += r;
00093   Y += r;
00094   Z += r;
00095   T += r;
00096 }
00097 
00098 void Vector4D::operator-=( const double r ) {
00099   X -= r;
00100   Y -= r;
00101   Z -= r;
00102   T -= r;
00103 }
00104 
00105 void Vector4D::operator*=( const double r ) {
00106   X *= r;
00107   Y *= r;
00108   Z *= r;
00109   T *= r;
00110 }
00111 
00112 void Vector4D::operator/=( const double r ) {
00113   if ( r == 0 ) return;
00114   X /= r;
00115   Y /= r;
00116   Z /= r;
00117   T /= r;
00118 }
00119 
00120 inline void Vector4D::Abs() {
00121   X = abs(X);
00122   Y = abs(Y);
00123   Z = abs(Z);
00124   T = abs(T);
00125 }
00126 
00127 inline BOOL Vector4D::bAtOrg() const {
00128   return ( (X == 0.0) && (Y == 0.0) && (Z == 0.0) && (T == 0.0) );
00129 }
00130 
00131 BOOL Vector4D::bWithinLimits( const double r ) const {
00132   return !( (X >  r) || (Y >  r) || (Z >  r) || (T >  r)
00133          || (X < -r) || (Y < -r) || (Z < -r) || (T < -r) );
00134 }
00135 
00136 inline double Vector4D::Dot( const Vector4D& v ) const {
00137   return (X * v.X) + (Y * v.Y) + (Z * v.Z) + (T * v.T);
00138 }
00139 
00140 inline double Vector4D::Magnitude() const {
00141   return sqrt( (X * X) + (Y * Y) + (Z * Z) + (T * T) );
00142 }
00143 
00144 void Vector4D::ClipToDegrees() {
00145   if (X > 360.0) 
00146     X = mod(X, 360.0);
00147 
00148   if (Y > 360.0)
00149     Y = mod(Y, 360.0);
00150 
00151   if (Z > 360.0)
00152     Z = mod(Z, 360.0);
00153 
00154   if (T > 360.0)
00155     T = mod(T, 360.0);
00156 }
00157 
00158 void Vector4D::Normalize() {
00159   double Mag = Magnitude();
00160 
00161   if ( Mag != 0 ) {
00162     X /= Mag;
00163     Y /= Mag;
00164     Z /= Mag;
00165     T /= Mag;
00166   }
00167 }
00168 
00169 void Vector4D::ToRadians()
00170 {
00171   if (abs(X) > 360.0)
00172     X = mod(X, 360.0);
00173 
00174   if (abs(Y) > 360.0)
00175     Y = mod(Y, 360.0);
00176 
00177   if (abs(Z) > 360.0)
00178     Z = mod(Z, 360.0);
00179 
00180   if (abs(T) > 360.0)
00181     T = mod(T, 360.0);
00182 
00183   X *= MATH_PI / 180.0;
00184   Y *= MATH_PI / 180.0;
00185   Z *= MATH_PI / 180.0;
00186   T *= MATH_PI / 180.0;
00187 }
00188 
00189 void Vector4D::HalfBetween( const Vector4D& v ) {
00190   X = 0.5 * (X + v.X);
00191   Y = 0.5 * (Y + v.Y);
00192   Z = 0.5 * (Z + v.Z);
00193   T = 0.5 * (T + v.T);
00194 }
00195 
00196 inline Vector4D& Vector4D::operator=( const Vector4D& v ) {
00197   X = v.X;
00198   Y = v.Y:
00199   Z = v.Z;
00200   T = v.T;
00201   return *this;
00202 }
00203 
00204 inline void Vector4D::AddScaled( const Vector4D& v, const double Scale ) {
00205   X += v.X * Scale; 
00206   Y += v.Y * Scale; 
00207   Z += v.Z * Scale;
00208   T += v.T * Scale; 
00209 }
00210 
00211 inline void Vector4D::Adjust( const double x, const double y,
00212                               const double z, const double t ) {
00213   X += x;
00214   Y += y;
00215   Z += z;
00216   T += t;
00217 }
00218 
00219 inline double Vector4D::X() const {
00220   return X;
00221 }
00222 
00223 inline double Vector4D::X( const double x ) {
00224   X = x;
00225   return X;
00226 }
00227 
00228 inline double Vector4D::Y() const {
00229   return Y;
00230 }
00231 
00232 inline double Vector4D::Y( const double y ) {
00233   Y = y;
00234   return Y;
00235 }
00236 
00237 inline double Vector4D::Z() const {
00238   return Z;
00239 }
00240 
00241 inline double Vector4D::Z( const double z ) {
00242   Z = z;
00243   return Z;
00244 }
00245 
00246 inline double Vector4D::T() const {
00247   return T;
00248 }
00249 
00250 inline double Vector4D::T( const double t ) {
00251   T = t;
00252   return T;
00253 }
00254 
00255 inline double Vector4D::MagSum() const {
00256   return (X + Y + Z + T);
00257 }
00258 
00259 inline void Vector4D::Negate() {
00260   X *= -1;
00261   Y *= -1;
00262   Z *= -1;
00263   T *= -1;
00264 }
00265 
00266 inline void Vector4D::Set( const double x, const double y,
00267                            const double z, const double t ) {
00268   X = x;
00269   Y = y;
00270   Z = z;
00271   T = t;
00272 }
00273 
00274 inline void Vector4D::Square() {
00275   X *= X;
00276   Y *= Y;
00277   Z *= Z;
00278   T *= T;
00279 }
00280 
00281 inline Vector4D vecHalfBetween( const Vector4D& v1, const Vector4D& v2 ) {
00282   return Vector4D(  0.5 * (v1.X + v2.X),
00283                     0.5 * (v1.Y + v2.Y),
00284                     0.5 * (v1.Z + v2.Z)
00285                     0.5 * (v1.T + v2.T)
00286   );
00287 }
00288 
00289 // For 4D ???  ALL THAT FOLLOW MUST BE CHANGE FOR 4D VECTOR EQUIVALENT...
00290 void Vector4D::Cross( const Vector4D& v ) {
00291   const double xTmp = (Y * v.Z) - (Z * v.Y);
00292   const double yTmp = (Z * v.X) - (X * v.Z);
00293   const double zTmp = (X * v.Y) - (Y * v.X);
00294   X = xTmp;
00295   Y = yTmp;
00296   Z = zTmp;
00297 }
00298 
00299 Vector4D vecCross( const Vector4D& v1, const Vector4D& v2 ) {
00300   return Vector4D( (v1.Y * v2.Z) - (v1.Z * v2.Y),
00301                    (v1.Z * v2.X) - (v1.X * v2.Z),
00302                    (v1.X * v2.Y) - (v1.Y * v2.X), v1.T );
00303 }
00304 
00305 inline Vector4D vecMix( const Vector4D& v1, const Vector4D& v2 ) {
00306   return Vector4D(  v1.X * v2.Y, v1.X * v2.Z, v1.Y * v2.Z );
00307 }
00308 
00309 void Vector4D::Mix( const Vector4D& v ) {  // ??????
00310   X *= v.Y;
00311   X *= v.Z;
00312   Y *= v.Z;
00313 }
00314 
00315 // ---------------------------------------------------------------------------
00316 //  Typedef the vector to T4DPoint so that it can be more self documenting
00317 //  when used as a point in a 4D floating point space.
00318 // ---------------------------------------------------------------------------
00319 typedef Vector4D   T4DPoint;
00320 
00321 #endif

Generated on Sun Oct 14 18:46:15 2001 for Standard J2K Library by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001