00001 #ifndef __J2K__JVector2D_CPP__
00002 #define __J2K__JVector2D_CPP__
00003
00004 #include <j2k/Fred/Math/Vector/Vector2D.hpp>
00005
00006 JVector2D::JVector2D()
00007 : X( 0.0 ), Y( 0.0 ) { }
00008
00009 JVector2D::JVector2D( const JVector2D& v )
00010 : X( v.X ), Y( v.Y ) { }
00011
00012 JVector2D::JVector2D( const double x, const double y )
00013 : X( x ), Y( y ) { }
00014
00015 JVector2D& JVector2D::operator=( const JVector2D& v ) {
00016 if ( this != &v ) {
00017 X = v.X;
00018 Y = v.Y;
00019 }
00020 return *this;
00021 }
00022
00023 JVector2D operator+( const JVector2D& v1, const JVector2D& v2 ) {
00024 return JVector2D( v1.X + v2.X, v1.Y + v2.Y );
00025 }
00026
00027 void JVector2D::operator+=( const JVector2D& v ) {
00028 X += v.X;
00029 Y += v.Y;
00030 }
00031
00032 JVector2D operator-( const JVector2D& v1, const JVector2D& v2 ) {
00033 return JVector2D( v1.X - v2.X, v1.Y - v2.Y );
00034 }
00035
00036 void JVector2D::operator-=( const JVector2D& v ) {
00037 X -= v.X;
00038 Y -= v.Y;
00039 }
00040
00041 JVector2D operator*( const JVector2D& v1, const JVector2D& v2 ) {
00042 return JVector2D( v1.X * v2.X, v1.Y * v2.Y );
00043 }
00044
00045 void JVector2D::operator*=( const JVector2D& v ) {
00046 X *= v.X;
00047 Y *= v.Y;
00048 }
00049
00050 void JVector2D::operator*=( const double Factor ) {
00051 X *= Factor;
00052 Y *= Factor;
00053 }
00054
00055 JVector2D operator/( const JVector2D& v1, const JVector2D& v2 ) {
00056 return JVector2D( v1.X / v2.X, v1.Y / v2.Y );
00057 }
00058
00059 void JVector2D::operator/=( const JVector2D& v ) {
00060 X /= v.X;
00061 Y /= v.Y;
00062 }
00063
00064 JVector2D operator/( const JVector2D& v1, const double Factor ) {
00065 return JVector2D( v1.X / Factor, v1.Y / Factor );
00066 }
00067
00068 BOOL JVector2D::Compare( const JVector2D& v ) const {
00069 if ( this == &vecToTest ) return TRUE;
00070
00071
00072 if ( v.X != X ) return FALSE;
00073 if ( v.Y != Y ) return FALSE;
00074
00075 return TRUE;
00076 }
00077
00078 inline BOOL JVector2D::operator==( const JVector2D& v ) const {
00079 return Compare( v );
00080 }
00081
00082 inline BOOL JVector2D::operator!=( const JVector2D& v ) const {
00083 return !Compare( v );
00084 }
00085
00086 inline BOOL JVector2D::bAtOrg() const {
00087 if ( (X == 0.0) && (Y == 0.0) ) return TRUE;
00088 return FALSE;
00089 }
00090
00091 inline double Dot(const JVector2D& v1, const JVector2D& v2) {
00092 return (v1.X * v2.X) + (v1.Y * v2.Y);
00093 }
00094
00095 inline double JVector2D::Magnitude() const {
00096 return sqrt( (X * X) + (Y * Y) );
00097 }
00098
00099 inline void JVector2D::Normalize() {
00100 double Mag = sqrt( (X * X) + (Y * Y) );
00101 X /= Mag;
00102 Y /= Mag;
00103 }
00104
00105 void JVector2D::ToRadians() {
00106 if (abs(X) > 360.0)
00107 X = mod(X, 360.0);
00108 if (abs(Y) > 360.0)
00109 Y = mod(Y, 360.0);
00110
00111 X *= MATH_PI / 180.0;
00112 Y *= MATH_PI / 180.0;
00113 }
00114
00115 JVector2D vecHalfBetween(const JVector2D& v1, const JVector2D& v2) {
00116 return JVector2D( 0.5 * (v1.X + v2.X), 0.5 * (v1.Y + v2.Y) );
00117 }
00118
00119 inline double JVector2D::X() const {
00120 return X;
00121 }
00122
00123 inline double JVector2D::X(const double x) {
00124 X = x;
00125 return X;
00126 }
00127
00128 inline double JVector2D::Y() const {
00129 return Y;
00130 }
00131
00132 inline double JVector2D::Y(const double y ) {
00133 Y = y;
00134 return Y;
00135 }
00136
00137 inline void JVector2D::Negate() {
00138 X = -X;
00139 Y = -Y;
00140 }
00141
00142 inline void JVector2D::Set( const double x, const double y ) {
00143 X = x;
00144 Y = y;
00145 }
00146
00147 inline void JVector2D::Square() {
00148 X *= X;
00149 Y *= Y;
00150 }
00151
00152 #endif