afVec2.cpp
上传用户:kaiguan
上传日期:2007-10-28
资源大小:1074k
文件大小:1k
源码类别:

其他游戏

开发平台:

Visual C++

  1. #pragma warning(disable: 4514)
  2. #include "afVec2.h"
  3. #include "afMathTool.h"
  4. #include <assert.h>
  5. #include <math.h>
  6. float afVec2::cosine(const afVec2& left, Axis nAxis)
  7. {
  8. float alpha;
  9. switch(nAxis)
  10. {
  11. default:
  12. case X_AXIS:
  13. alpha = (float)acos(left[0]);
  14. if (left[1]<0.0f)
  15. alpha = afFTWOPI - alpha;
  16. return alpha;
  17. case Y_AXIS:
  18. alpha = (float)acos(left[1]);
  19. if (left[0]>0.0f)
  20. alpha = afFTWOPI - alpha;
  21. return alpha;
  22. }
  23. return -1.0f;
  24. }
  25. float afVec2::cosine(const afVec2& left, const afVec2& right)
  26. {
  27. float alpha,beta,dif;
  28. alpha = cosine(left);
  29. beta = cosine(right);
  30. dif = beta-alpha;
  31. if (dif > afFPI)
  32. dif = -afFTWOPI + dif;
  33. else
  34. if (dif < -afFPI)
  35. dif = afFTWOPI + dif;
  36. assert(dif<=afFPI && dif>=-afFPI);
  37. return dif;
  38. }
  39. float afVec2::distance(const afVec2& vec) const
  40. {
  41.     return (float)sqrt((x-vec.x)*(x-vec.x)+(y-vec.y)*(y-vec.y));
  42. }
  43. float afVec2::length() const
  44. {
  45.     return (float)sqrt(x*x+y*y);
  46. }
  47. float afVec2::normalize()
  48. {
  49.     float len = x*x+y*y;
  50.     if (len!=1.0)
  51.     {
  52.         if (len>0.00001f)
  53.         {
  54.             len = (float)sqrt(len);
  55.             x /= len;
  56.             y /= len;
  57.         }
  58.         else
  59.             len = 0.0;
  60.     }
  61.     return len;
  62. }