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

C:/temp/src/j2k/Deprecated/old_18mar_diff/Vector/Vector3D.cpp

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

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