CMath.h
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:4k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // CMath.h: interface for the CMath class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_)
  5. #define AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "structdef.h"
  10. #include "math.h"
  11. class CMath  
  12. {
  13. public:
  14. CMath();
  15. virtual ~CMath();
  16. //////////判断线段是否与多边形相交  true:相交,false:不相交
  17.     bool     IsLineSegmentCutByPolygon(VERTEX v1 ,VERTEX v2,VERTEX* pVertex,int number);    
  18. //////////判断线段是否与3D包围盒相交  true:相交,false:不相交
  19.     bool     IsLineSegmentCutBy3DBoundary(VERTEX v1 ,VERTEX v2,BOUNDARY_3D boundary);    
  20.     bool     IsLineSegmentCutBy3DBoundary(VERTEX *v1 ,VERTEX *v2,BOUNDARY_3D *boundary);  
  21. //////////判断线段是否与标准长方形相交  true:相交,false:不相交
  22.     bool     IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX va,VERTEX vb,VERTEX vc,VERTEX vd);    
  23.     bool     IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX *pv);    
  24. //////////判断立方体是否与长方形相交  true:相交,false:不相交
  25.     bool     IsCubeCutByQuad(CUBE cube , QUAD quad);
  26. //////////判断点是否在立方体内部      true:在内部,false:不在内部
  27.     bool     IsVertexInsideCube(VERTEX vertex , CUBE cube );
  28.     bool     IsVertexInsideCube(VERTEX *vertex , BOUNDARY_3D *boundary);
  29. //////////由顶点数组获得平面方程
  30. PLANE    GetPlaneEquation(VERTEX *pVertices,int VerticesNumber);
  31. //////////由三个顶点获得平面方程
  32. PLANE    GetPlaneEquation(VERTEX v1,VERTEX v2,VERTEX v3);
  33.     //////////获得过两点且与一平面垂直的平面方程
  34. PLANE    GetPlaneEquation(VERTEX v1,VERTEX v2,PLANE plane);
  35.     //////////获得过一点且与两平面都垂直的平面方程
  36. PLANE    GetPlaneEquation(VERTEX vertex,PLANE plane1,PLANE plane2);
  37. //////////获得直线与平面交点
  38. VERTEX   GetIntersection(VERTEX vertex1,VERTEX vertex2,PLANE plane);
  39. //////////获得一点在平面上的投影点
  40. VERTEX   GetProjection(VERTEX vertex,PLANE plane);
  41. //////////获得交点的贴图坐标
  42.     TEXCOORD GetIntersectionTexCoord(VERTEX pointA,TEXCOORD texcoordA,VERTEX pointB,TEXCOORD texcoordB,  PLANE plane);
  43. //////////获得空间四边形网格上一点的位置 uPos,vPos为0-1之间的数
  44. VERTEX   GetPositionOnGrid(VERTEX *pQuads,float uPos,float vPos);
  45. //////////获得两向量的叉积
  46. NORMAL   GetTwoNormalProduct(NORMAL normal1,NORMAL normal2);
  47. //////////获得两个向量和
  48. NORMAL   GetTwoNormalAdd(NORMAL normal1,NORMAL normal2);
  49. //////////获得向量
  50. NORMAL   GetNormal(VERTEX v1,VERTEX v2,VERTEX v3);
  51. NORMAL   GetNormal(float *v1,float *v2,float *v3);
  52. //////////获得两点距离
  53. float    GetDistance(VERTEX vertex1,VERTEX vertex2);
  54. //////////获得2D平面点到直线距离
  55. float    GetPointToLineDist2D(VERTEX lineV1,VERTEX lineV2,VERTEX point);
  56. //////////获得点到平面的距离
  57. float    GetDistance(VERTEX point,PLANE plane);
  58. float    GetDistance(VERTEX point,PLANE plane,float PowABC);
  59. //////////获得两向量夹角余弦
  60.     float    GetTwoVectorAngleCosine(NORMAL n1,NORMAL n2);
  61.     float    GetTwoVectorAngleCosine(VERTEX  v1,VERTEX vCenter,VERTEX v2);
  62. //////////获得两个向量的数量积,点乘 A.B
  63. float    GetDotProduct(NORMAL n1,NORMAL n2);
  64. //////////获得向量长度
  65. float    GetMagnitude(NORMAL normal);
  66. float    GetMagnitude(VERTEX v1,VERTEX v2);
  67.     //////////判断两向量的夹角关系 
  68. int      ClassifyTwoNormal(NORMAL n1,NORMAL n2);
  69.     //////////判断两向量的夹角关系
  70.     int      ClassifyTwoNormal(VERTEX  v1,VERTEX vCenter,VERTEX v2);
  71.     //////////判断点与平面的关系 -1:在平面后,0:在平面上,1:在平面前
  72.     int      ClassifyPointPlane(VERTEX point,PLANE plane);
  73. //////////判断多边形与平面关系 -1:在平面后,0:重合,1:在平面前,2:穿越
  74.     int      ClassifyPolygonPlane(PLANE plane,VERTEX *pVertex,int number);
  75.     //////////归一标准化
  76. NORMAL   Normalization(NORMAL normal);
  77. NORMAL   Normalization(double x,double y,double z);
  78. };
  79. #endif // !defined(AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_)