hgevector.cpp
上传用户:maxiaolivb
上传日期:2022-06-07
资源大小:915k
文件大小:1k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /*
  2. ** Haaf's Game Engine 1.5
  3. ** Copyright (C) 2003-2004, Relish Games
  4. ** hge.relishgames.com
  5. **
  6. ** hgeVector helper class implementation
  7. */
  8. #include "....includehgevector.h"
  9. float InvSqrt(float x)
  10. {
  11. union
  12.         {
  13.           int intPart;
  14.           float floatPart;
  15.         } convertor;
  16.         convertor.floatPart = x;
  17.         convertor.intPart = 0x5f3759df - (convertor.intPart >> 1);
  18.         return convertor.floatPart*(1.5f - 0.4999f*x*convertor.floatPart*convertor.floatPart);
  19. }
  20. /*
  21. hgeVector *hgeVector::Normalize()
  22. {
  23. float lenRcp;
  24. lenRcp=sqrtf(Dot(this));
  25. if(lenRcp)
  26. {
  27. lenRcp=1.0f/lenRcp;
  28. x*=lenRcp;
  29. y*=lenRcp;
  30. }
  31. return this;
  32. }
  33. */
  34. float hgeVector::Angle(const hgeVector *v) const
  35. {
  36. if(v)
  37. {
  38. hgeVector s=*this, t=*v;
  39. s.Normalize(); t.Normalize();
  40. return acosf(s.Dot(&t));
  41. }
  42. else return atan2f(y, x);
  43. }
  44. hgeVector *hgeVector::Rotate(float a)
  45. {
  46. hgeVector v;
  47. v.x=x*cosf(a) - y*sinf(a);
  48. v.y=x*sinf(a) + y*cosf(a);
  49. x=v.x; y=v.y;
  50. return this;
  51. }