00001 #ifndef __J2K__VECTOR4D_HH__
00002 #define __J2K__VECTOR4D_HH__
00003
00004 #define MATH_PI 3.141592653589793238462643
00005
00006 class Vector4D {
00007 public:
00008
00009 Vector4D();
00010 Vector4D( const double x, const double y, const double z, const double t );
00011 Vector4D( const Vector4D& v );
00012
00013 Vector4D& operator=( const Vector4D& v );
00014
00015 BOOL operator==( const Vector4D& v ) const;
00016 BOOL operator!=( const Vector4D& v ) const;
00017
00018 friend Vector4D operator+( const Vector4D& left, const Vector4D& right );
00019 friend Vector4D operator-( const Vector4D& left, const Vector4D& right );
00020 friend Vector4D operator*( const Vector4D& left, const Vector4D& right );
00021 friend Vector4D operator/( const Vector4D& left, const Vector4D& right );
00022
00023 friend Vector4D operator+( const Vector4D& left, const double Factor );
00024 friend Vector4D operator-( const Vector4D& left, const double Factor );
00025 friend Vector4D operator*( const Vector4D& left, const double Factor );
00026 friend Vector4D operator/( const Vector4D& left, const double Factor );
00027
00028 void operator+=( const Vector4D& v );
00029 void operator-=( const Vector4D& v );
00030 void operator*=( const Vector4D& v );
00031 void operator/=( const Vector4D& v );
00032
00033 void operator+=( const double Factor );
00034 void operator-=( const double Factor );
00035 void operator*=( const double Factor );
00036 void operator/=( const double Factor );
00037
00038 void Abs();
00039
00040 void AddScaled( const Vector4D& v, const double& Scale );
00041 void Adjust( const double x, const double y,
00042 const double z, const double t );
00043
00044 BOOL bAtOrg() const;
00045 BOOL bWithinLimits( const double Limit ) const;
00046
00047 double Dot( const Vector4D& v ) const;
00048
00049 double X() const;
00050 double Y() const;
00051 double Z() const;
00052 double T() const;
00053
00054 double X( const double x );
00055 double Y( const double y );
00056 double Z( const double z );
00057 double T( const double t );
00058
00059 double Magnitude() const;
00060 double MagSum() const;
00061 void ClipToDegrees();
00062 void HalfBetween( const Vector4D& v );
00063 void Negate();
00064 void Normalize();
00065 void Set( const double x, const double y, const double z, const double t );
00066 void Square();
00067 void ToRadians();
00068 friend Vector4D vecHalfBetween( const Vector4D& left,
00069 const Vector4D& right );
00070
00071
00072 void Cross( const Vector4D& v );
00073 void Mix( const Vector4D& v );
00074 friend Vector4D vecCross( const Vector4D& left, const Vector4D& right );
00075 friend Vector4D vecMix( const Vector4D& left, const Vector4D& right );
00076
00077 protected:
00078 friend class Matrix4by4;
00079
00080 private:
00081 double X;
00082 double Y;
00083 double Z;
00084 double T;
00085 };
00086
00087 #endif