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__