xsi_vector2f.h
Go to the documentation of this file.

    00001 //*****************************************************************************
    00011 //*****************************************************************************
    00012
    00013 #if (_MSC_VER > 1000) || defined(SGI_COMPILER)
    00014 #pragma once
    00015 #endif
    00016
    00017 #ifndef __XSIVECTOR2F_H__
    00018 #define __XSIVECTOR2F_H__
    00019
    00020 #include "sicppsdk.h"
    00021 #include <math.h>
    00022
    00023 namespace XSI {
    00024
    00025 namespace MATH {
    00026
    00027 //*****************************************************************************
    00034 //*****************************************************************************
    00035 class CVector2f
    00036 {
    00037 public:
    00039     SICPPSDK_INLINE CVector2f();
    00040
    00045     SICPPSDK_INLINE CVector2f(float in_X, float in_Y );
    00046
    00050     SICPPSDK_INLINE CVector2f( const CVector2f& in_vector2);
    00051
    00053     ~CVector2f() {}
    00054
    00059     SICPPSDK_INLINE CVector2f & operator=( const CVector2f & in_vector2 );
    00060
    00066     SICPPSDK_INLINE bool operator ==(const CVector2f & in_vector2 )const;
    00067
    00073     SICPPSDK_INLINE bool operator !=(const CVector2f & in_vector2 )const;
    00074
    00082     SICPPSDK_INLINE bool operator < ( const CVector2f & in_vector2 ) const;
    00083
    00088     SICPPSDK_INLINE CVector2f& operator ~();
    00089
    00095     SICPPSDK_INLINE CVector2f& operator +=(const CVector2f& in_vector2);
    00096
    00102     SICPPSDK_INLINE CVector2f& operator -=(const CVector2f & in_vector2);
    00103
    00109     SICPPSDK_INLINE CVector2f& operator *=(const float& in_dAlpha);
    00110
    00114     SICPPSDK_INLINE CVector2f& SetNull();
    00115
    00119     SICPPSDK_INLINE float GetLength()const;
    00120
    00124     SICPPSDK_INLINE float GetLengthSquared()const;
    00125
    00130     SICPPSDK_INLINE bool Equals(const CVector2f& in_vector2)const;
    00131
    00138     SICPPSDK_INLINE bool EpsilonEquals
    00139     (
    00140         const CVector2f& in_vector,
    00141         const float in_fEpsilon
    00142     )const;
    00143
    00150     SICPPSDK_INLINE CVector2f& ScaleAddInPlace(float in_dS,const CVector2f& in_vector2);
    00151
    00159     SICPPSDK_INLINE CVector2f& ScaleAdd
    00160     (
    00161         float               in_dS,
    00162         const CVector2f&    in_vector3A,
    00163         const CVector2f&    in_vector3B
    00164     );
    00165
    00170     SICPPSDK_INLINE CVector2f& ScaleInPlace(float in_dAlpha);
    00171
    00177     SICPPSDK_INLINE CVector2f& Scale(float in_Alpha, const CVector2f& in_vector2);
    00178
    00182     SICPPSDK_INLINE CVector2f& NegateInPlace();
    00183
    00188     SICPPSDK_INLINE CVector2f& Negate(const CVector2f& in_vector2);
    00189
    00194     SICPPSDK_INLINE CVector2f& SubInPlace(const CVector2f& in_vector2);
    00195
    00202     SICPPSDK_INLINE CVector2f& Sub(const CVector2f& in_vector3A, const CVector2f& in_vector3B);
    00203
    00208     SICPPSDK_INLINE CVector2f& AddInPlace(const CVector2f& in_vector2);
    00209
    00215     SICPPSDK_INLINE CVector2f& Add(const CVector2f& in_vector3A, const CVector2f& in_vector3B);
    00216
    00220     SICPPSDK_INLINE float GetY()const;
    00221
    00226     SICPPSDK_INLINE CVector2f& PutY(float in_X);
    00227
    00231     SICPPSDK_INLINE float GetX()const;
    00232
    00237     SICPPSDK_INLINE CVector2f& PutX(float in_X);
    00238
    00239 private:
    00240     float m_X,m_Y;
    00241 };
    00242
    00243 //inline functions
    00244 SICPPSDK_INLINE CVector2f::CVector2f()
    00245 {
    00246     m_X = 0;
    00247     m_Y = 0;
    00248 }
    00249
    00250 SICPPSDK_INLINE CVector2f::CVector2f( const CVector2f& in_vct )
    00251 {
    00252     *this = in_vct;
    00253 }
    00254
    00255 SICPPSDK_INLINE CVector2f::CVector2f(float in_X, float in_Y):m_X(in_X),m_Y(in_Y){}
    00256
    00257
    00258 SICPPSDK_INLINE CVector2f& CVector2f::operator=( const CVector2f & in_vct )
    00259 {
    00260     m_X = in_vct.m_X;
    00261     m_Y = in_vct.m_Y;
    00262     return (*this);
    00263 }
    00264
    00265 SICPPSDK_INLINE bool CVector2f::operator ==(const CVector2f & in_vector2 )const
    00266 {
    00267     return Equals(in_vector2);
    00268 }
    00269
    00270 SICPPSDK_INLINE bool CVector2f::operator !=(const CVector2f & in_vector2 )const
    00271 {
    00272     return ! Equals(in_vector2);
    00273 }
    00274
    00275 SICPPSDK_INLINE bool CVector2f::operator < ( const CVector2f& in_vector2 ) const
    00276 {
    00277     if ( m_X != in_vector2.m_X ) return m_X < in_vector2.m_X;
    00278     if ( m_Y != in_vector2.m_Y ) return m_Y < in_vector2.m_Y;
    00279     return false;
    00280 }
    00281
    00282 SICPPSDK_INLINE CVector2f& CVector2f::operator ~()
    00283 {
    00284     return NegateInPlace();
    00285 }
    00286
    00287 SICPPSDK_INLINE CVector2f& CVector2f::operator +=(const CVector2f& in_vector2)
    00288 {
    00289     return AddInPlace(in_vector2);
    00290 }
    00291
    00292 SICPPSDK_INLINE CVector2f& CVector2f::operator -=(const CVector2f& in_vector2)
    00293 {
    00294     return SubInPlace(in_vector2);
    00295 }
    00296
    00297 SICPPSDK_INLINE CVector2f& CVector2f::operator *=(const float& in_dAlpha)
    00298 {
    00299     return ScaleInPlace(in_dAlpha);
    00300 }
    00301
    00302 SICPPSDK_INLINE CVector2f& CVector2f::SetNull()
    00303 {
    00304     m_X = m_Y = 0.0;
    00305     return (*this);
    00306 }
    00307
    00308 SICPPSDK_INLINE float CVector2f::GetLength()const
    00309 {
    00310     return sqrt( GetLengthSquared() );
    00311 }
    00312
    00313 SICPPSDK_INLINE float CVector2f::GetLengthSquared()const
    00314 {
    00315     return(m_X*m_X + m_Y*m_Y );
    00316 }
    00317
    00318 SICPPSDK_INLINE bool CVector2f::Equals(const CVector2f& in_vec)const
    00319 {
    00320     return (this == &in_vec) ? true : ( ( m_X == in_vec.GetX() ) && ( m_Y == in_vec.GetY() ) );
    00321 }
    00322
    00323 SICPPSDK_INLINE bool CVector2f::EpsilonEquals
    00324 (
    00325     const CVector2f& in_cVec2,
    00326     const float in_fEpsilon
    00327 )const
    00328 {
    00329     return (this == &in_cVec2) ? true :
    00330         (   fabs( m_X - in_cVec2.GetX() ) < ::fabs(in_fEpsilon) &&
    00331             fabs( m_Y - in_cVec2.GetY() ) < ::fabs(in_fEpsilon) );
    00332 }
    00333
    00334 SICPPSDK_INLINE CVector2f& CVector2f::ScaleAddInPlace
    00335 (
    00336     float in_ScalingFactor,
    00337     const CVector2f& in_vec
    00338 )
    00339 {
    00340     ScaleInPlace(in_ScalingFactor);
    00341     return AddInPlace(in_vec);
    00342 }
    00343
    00344 SICPPSDK_INLINE CVector2f& CVector2f::ScaleAdd
    00345 (
    00346     const float in_ScalingFactor,
    00347     const CVector2f& in_vec3A,
    00348     const CVector2f& in_vec3B
    00349 )
    00350 {
    00351     Scale(in_ScalingFactor, in_vec3A);
    00352     return AddInPlace(in_vec3B);
    00353 }
    00354
    00355 SICPPSDK_INLINE CVector2f& CVector2f::ScaleInPlace(float in_dScalingFactor)
    00356 {
    00357     m_X *= in_dScalingFactor;
    00358     m_Y *= in_dScalingFactor;
    00359     return (*this);
    00360 }
    00361
    00362 SICPPSDK_INLINE CVector2f& CVector2f::Scale
    00363 (
    00364     float in_dScalingFactor,
    00365     const CVector2f& in_vec
    00366 )
    00367 {
    00368     m_X = in_vec.GetX() * in_dScalingFactor;
    00369     m_Y = in_vec.GetY() * in_dScalingFactor;
    00370     return (*this);
    00371 }
    00372
    00373 SICPPSDK_INLINE CVector2f& CVector2f::NegateInPlace()
    00374 {
    00375     m_X = -m_X;
    00376     m_Y = -m_Y;
    00377     return (*this);
    00378 }
    00379
    00380 SICPPSDK_INLINE CVector2f& CVector2f::Negate(const CVector2f& in_vec )
    00381 {
    00382     m_X = -in_vec.GetX();
    00383     m_Y = -in_vec.GetY();
    00384     return (*this);
    00385 }
    00386
    00387 SICPPSDK_INLINE CVector2f& CVector2f::SubInPlace(const CVector2f& in_vec)
    00388 {
    00389     m_X -= in_vec.GetX();
    00390     m_Y -= in_vec.GetY();
    00391     return (*this);
    00392 }
    00393
    00394 SICPPSDK_INLINE CVector2f& CVector2f::Sub
    00395 (
    00396     const CVector2f& in_vec3A,
    00397     const CVector2f& in_vec3B
    00398 )
    00399 {
    00400     m_X = in_vec3A.GetX() - in_vec3B.GetX();
    00401     m_Y = in_vec3A.GetY() - in_vec3B.GetY();
    00402     return (*this);
    00403 }
    00404
    00405 SICPPSDK_INLINE CVector2f& CVector2f::AddInPlace(const CVector2f& in_vec)
    00406 {
    00407     m_X += in_vec.GetX();
    00408     m_Y += in_vec.GetY();
    00409     return (*this);
    00410 }
    00411
    00412 SICPPSDK_INLINE CVector2f& CVector2f::Add
    00413 (
    00414     const CVector2f& in_vec3A,
    00415     const CVector2f& in_vec3B
    00416 )
    00417 {
    00418     m_X = in_vec3A.GetX() + in_vec3B.GetX();
    00419     m_Y = in_vec3A.GetY() + in_vec3B.GetY();
    00420     return (*this);
    00421 }
    00422
    00423 SICPPSDK_INLINE float CVector2f::GetY()const
    00424 {
    00425     return m_Y;
    00426 }
    00427
    00428 SICPPSDK_INLINE CVector2f& CVector2f::PutY(float in_Y)
    00429 {
    00430     m_Y = in_Y;
    00431     return (*this);
    00432 }
    00433
    00434 SICPPSDK_INLINE float CVector2f::GetX()const
    00435 {
    00436     return m_X;
    00437 }
    00438
    00439 SICPPSDK_INLINE CVector2f& CVector2f::PutX(float in_X)
    00440 {
    00441     m_X = in_X;
    00442     return (*this);
    00443 }
    00444
    00445 };
    00446 };
    00447
    00448 #endif // __XSIVECTOR2F_H__