hgevector.h
上传用户:jnfxsk
上传日期:2022-06-16
资源大小:3675k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.7
  3. ** Copyright (C) 2003-2007, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** hgeVector helper class
  7. */
  8. #ifndef HGEVECTOR_H
  9. #define HGEVECTOR_H
  10. #include "hge.h"
  11. #include <math.h>
  12. /*
  13. ** Fast 1.0/sqrtf(float) routine
  14. */
  15. float InvSqrt(float x);
  16. class hgeVector
  17. {
  18. public:
  19. float x,y;
  20. hgeVector(float _x, float _y) { x=_x; y=_y; }
  21. hgeVector() { x=0; y=0; }
  22. hgeVector operator-  () const { return hgeVector(-x, -y); }
  23. hgeVector operator-  (const hgeVector &v) const { return hgeVector(x-v.x, y-v.y); }
  24. hgeVector operator+  (const hgeVector &v) const { return hgeVector(x+v.x, y+v.y); }
  25. hgeVector& operator-= (const hgeVector &v)   { x-=v.x; y-=v.y; return *this; }
  26. hgeVector& operator+= (const hgeVector &v)   { x+=v.x; y+=v.y; return *this; }
  27. bool operator== (const hgeVector &v) const { return (x==v.x && y==v.y); }
  28. bool operator!= (const hgeVector &v) const { return (x!=v.x || y!=v.y); }
  29. hgeVector operator/  (const float scalar) const { return hgeVector(x/scalar, y/scalar); }
  30. hgeVector operator*  (const float scalar) const { return hgeVector(x*scalar, y*scalar); }
  31. hgeVector& operator*= (const float scalar)   { x*=scalar; y*=scalar; return *this;   }
  32. float Dot(const hgeVector *v) const { return x*v->x + y*v->y; }
  33. float Length() const { return sqrtf(Dot(this)); }
  34. float Angle(const hgeVector *v = 0) const;
  35. void Clamp(const float max) { if(Length() > max) { Normalize(); x *= max; y *= max; } }
  36. hgeVector* Normalize() { float rc=InvSqrt(Dot(this)); x*=rc; y*=rc; return this; }
  37. hgeVector* Rotate(float a);
  38. };
  39. inline hgeVector operator* (const float s, const hgeVector &v) { return v*s; }
  40. inline float  operator^ (const hgeVector &v, const hgeVector &u) { return v.Angle(&u); }
  41. inline float  operator% (const hgeVector &v, const hgeVector &u) { return v.Dot(&u); }
  42. #endif