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
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__