VECTOR3F.H
上传用户:jsylhbnbhn
上传日期:2013-11-03
资源大小:119k
文件大小:3k
源码类别:

OpenCV

开发平台:

Visual C++

  1. /***************************************************************************
  2.                           vector3f.h  -  description
  3.                              -------------------
  4.     begin                : Thu Apr 10 2003
  5.     copyright            : (C) 2003 by junglesong
  6.     email                : junglesong@etang.com
  7.  ***************************************************************************/
  8. #ifndef VECTOR3F_H
  9. #define VECTOR3F_H
  10. //基本三维空间"向量/点"类
  11. class Vector3f {
  12. public: 
  13. //无参构造函数
  14. Vector3f()
  15. {
  16. x=y=z=0;
  17. };
  18. //有参构造函数
  19. Vector3f(const float inx,const float iny,const float inz)
  20. {
  21. //分别将参数赋值给三个成员变量
  22. x=inx;
  23. y=iny;
  24. z=inz;
  25. };
  26. //析构函数
  27. ~Vector3f(){};
  28. //重载=操作符,实现两向量变量的赋值
  29. Vector3f& operator=(Vector3f& inVet)
  30. {
  31. x=inVet.x;
  32. y=inVet.y;
  33. z=inVet.z;
  34. return *this;
  35. };
  36. //重载+操作符,实现两向量变量的相加
  37. Vector3f operator+(Vector3f vVector)
  38. {
  39. //返回相加的结果
  40. return Vector3f(vVector.x + x, vVector.y + y, vVector.z + z);
  41. }
  42. //重载-操作符,实现两向量变量的相减
  43. Vector3f operator-(Vector3f vVector)
  44. {
  45. //返回相减的结果
  46. return Vector3f(x - vVector.x, y - vVector.y, z - vVector.z);
  47. }
  48. //重载*操作符,实现一个向量变量和一个浮点数的乘法
  49. Vector3f operator*(float num)
  50. {
  51. //返回缩放了的向量
  52. return Vector3f(x * num, y * num, z * num);
  53. }
  54. //重载/操作符,实现一个向量变量和一个浮点数的除法
  55. Vector3f operator/(float num)
  56. {
  57. //返回缩放了的向量
  58. return Vector3f(x / num, y / num, z / num);
  59. }
  60. //向量绕x轴旋转,参数sintheta为旋转角度的正弦值,参数costheta为旋转角度的余弦值
  61. void RotateX(float sintheta,float costheta)
  62. {
  63. float sin_beta,cos_bata;
  64. sin_beta=z*costheta +y*sintheta;
  65. cos_bata=y* costheta- z*sintheta;
  66. z=sin_beta;
  67. y=cos_bata;
  68. };
  69. //向量绕y轴旋转,参数sintheta为旋转角度的正弦值,参数costheta为旋转角度的余弦值
  70. void RotateY(float sintheta,float costheta)
  71. {
  72. float sin_beta,cos_bata;
  73. sin_beta=z*costheta +x*sintheta;
  74. cos_bata=x* costheta- z*sintheta;
  75. z=sin_beta;
  76. x=cos_bata;
  77. };
  78.     //向量绕z轴旋转,参数sintheta为旋转角度的正弦值,参数costheta为旋转角度的余弦值
  79. void RotateZ(float sintheta,float costheta)
  80. {
  81. float sin_beta,cos_bata;
  82. sin_beta=y*costheta +x*sintheta;
  83. cos_bata=x* costheta- y*sintheta;
  84. y=sin_beta;
  85. x=cos_bata;
  86. };
  87. //缩放一个向量,参数scale为缩放的比例
  88. void Zoom(float scale)
  89. {
  90. x*=scale;
  91. y*=scale;
  92. z*=scale;
  93. };
  94. //平移一个向量
  95. void Move(Vector3f inVect)
  96. {
  97. x+=inVect.x;
  98. y+=inVect.y;
  99. z+=inVect.z;
  100. };
  101. public:
  102. float x;//成员变量x,向量在x轴上的分量
  103. float y;//成员变量y,向量在y轴上的分量
  104. float z;//成员变量z,向量在z轴上的分量
  105. };
  106. //得到两向量的叉乘
  107. Vector3f Cross(Vector3f vVector1, Vector3f vVector2);
  108. //得到一个向量的绝对长度
  109. float Magnitude(Vector3f vNormal);
  110. //将一个向量单位化
  111. Vector3f Normalize(Vector3f vNormal);
  112. //得到一个三点决定的平面的垂直向量(经过单位化)
  113. Vector3f Normal(Vector3f vPolygon[]);
  114. //得到空间中两点的距离
  115. float Distance(Vector3f vPoint1, Vector3f vPoint2);
  116. //得到两向量的点积
  117. float Dot(Vector3f vVector1, Vector3f vVector2);
  118. //得到两向量的夹角
  119. double AngleBetweenVectors(Vector3f Vector1, Vector3f Vector2);
  120. #endif