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

其他游戏

开发平台:

Visual C++

  1. #include "afVec3.h"
  2. #include "afPlane.h"
  3. #include <math.h>
  4. #pragma warning(disable: 4514)
  5. #define MAX3(x,y,z) ( ((x>y)&&(x>z)) ? x :( ((y>x)&&(y>z))? y : z) )
  6. #define MID3(x,y,z) ( ((x>y)&&(x<z)) ? x :( ((y>x)&&(y<z))? y : z) )
  7. #define MIN3(x,y,z) ( ((x<y)&&(x<z)) ? x :( ((y<x)&&(y<z))? y : z) )
  8. float afVec3::length() const
  9. {
  10. return (float)sqrt( x*x + y*y + z*z );
  11. }
  12. float afVec3::distance(const afVec3& left, const afVec3& right)
  13. {
  14. return (float)sqrt(pow(left.x-right.x,2) + pow(left.y-right.y,2) + pow(left.z-right.z,2));
  15. }
  16. float afVec3::normalize()
  17. {
  18.     float l = length(), il;
  19. if (l!=0.0f)
  20. {
  21. il = 1.0f / l;
  22. x *= il;
  23. y *= il;
  24. z *= il;
  25. }
  26.     return ( l );
  27. }
  28. afVec3& afVec3::cross( const afVec3& v1, const afVec3& v2 )
  29. {
  30.     x = v1.y*v2.z - v1.z*v2.y;
  31.     y = v1.z*v2.x - v1.x*v2.z;
  32.     z = v1.x*v2.y - v1.y*v2.x;
  33.     return *this;
  34. }
  35. float afVec3::cosine(const afVec3& left,const afVec3& right)
  36. {
  37. float dif = (right-left).length() * 0.5f;
  38. if (dif<0.00001f)
  39. return 0.0f;
  40. return 2.0f*(float)asin(dif);
  41. }
  42. afVec3 afVec3::normal()
  43. {
  44. float rx,ry;
  45. rx = MAX3(x,y,z);
  46. ry = MID3(x,y,z);
  47. return afVec3(-ry,rx,0);
  48. }
  49. float afVec3::dot(const afVec3& nV) const
  50. {
  51. return x*nV.x + y*nV.y + z*nV.z;
  52. }
  53. bool afVec3::isInfrontOf(const afPlane& nPlane) const
  54. {
  55. return nPlane.x*x + nPlane.y*y + nPlane.z*z > nPlane.d;
  56. }