⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmath.h.svn-base

📁 自己做的小游戏
💻 SVN-BASE
字号:
// CMath.h: interface for the CMath class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_)
#define AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#include "structdef.h"
#include "math.h"
class CMath  
{
public:
	CMath();
	virtual ~CMath();
	//////////判断线段是否与多边形相交  true:相交,false:不相交
    bool     IsLineSegmentCutByPolygon(VERTEX v1 ,VERTEX v2,VERTEX* pVertex,int number);    
	//////////判断线段是否与3D包围盒相交  true:相交,false:不相交
    bool     IsLineSegmentCutBy3DBoundary(VERTEX v1 ,VERTEX v2,BOUNDARY_3D boundary);    
    bool     IsLineSegmentCutBy3DBoundary(VERTEX *v1 ,VERTEX *v2,BOUNDARY_3D *boundary);  
	//////////判断线段是否与标准长方形相交  true:相交,false:不相交
    bool     IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX va,VERTEX vb,VERTEX vc,VERTEX vd);    
    bool     IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX *pv);    
	//////////判断立方体是否与长方形相交  true:相交,false:不相交
    bool     IsCubeCutByQuad(CUBE cube , QUAD quad);
	//////////判断点是否在立方体内部      true:在内部,false:不在内部
    bool     IsVertexInsideCube(VERTEX vertex , CUBE cube );
    bool     IsVertexInsideCube(VERTEX *vertex , BOUNDARY_3D *boundary);
	//////////由顶点数组获得平面方程
	PLANE    GetPlaneEquation(VERTEX *pVertices,int VerticesNumber);
	//////////由三个顶点获得平面方程
	PLANE    GetPlaneEquation(VERTEX v1,VERTEX v2,VERTEX v3);
    //////////获得过两点且与一平面垂直的平面方程
	PLANE    GetPlaneEquation(VERTEX v1,VERTEX v2,PLANE plane);
    //////////获得过一点且与两平面都垂直的平面方程
	PLANE    GetPlaneEquation(VERTEX vertex,PLANE plane1,PLANE plane2);

	//////////获得直线与平面交点
	VERTEX   GetIntersection(VERTEX vertex1,VERTEX vertex2,PLANE plane);
	//////////获得一点在平面上的投影点
	VERTEX   GetProjection(VERTEX vertex,PLANE plane);

	//////////获得交点的贴图坐标
  // TEXCOORD GetIntersectionTexCoord(VERTEX pointA,TEXCOORD texcoordA,VERTEX pointB,TEXCOORD texcoordB,  PLANE plane);
	//////////获得空间四边形网格上一点的位置 uPos,vPos为0-1之间的数
	//VERTEX   GetPositionOnGrid(VERTEX *pQuads,float uPos,float vPos);

	//////////获得两向量的叉积
	NORMAL   GetTwoNormalProduct(NORMAL normal1,NORMAL normal2);
	//////////获得两个向量和
	NORMAL   GetTwoNormalAdd(NORMAL normal1,NORMAL normal2);

	//////////获得3点所在平面的法向量
	NORMAL   GetNormal(VERTEX v1,VERTEX v2,VERTEX v3);
	NORMAL   GetNormal(float *v1,float *v2,float *v3);

	//////////获得两点距离
	float    GetDistance(VERTEX vertex1,VERTEX vertex2);
	//////////获得2D平面点到直线距离
	float    GetPointToLineDist2D(VERTEX lineV1,VERTEX lineV2,VERTEX point);
	//////////获得点到平面的距离
	float    GetDistance(VERTEX point,PLANE plane);
	float    GetDistance(VERTEX point,PLANE plane,float PowABC);

	//////////获得两向量夹角余弦
    float    GetTwoVectorAngleCosine(NORMAL n1,NORMAL n2);
    float    GetTwoVectorAngleCosine(VERTEX  v1,VERTEX vCenter,VERTEX v2);

	//////////获得两个向量的数量积,点乘 A.B
	float    GetDotProduct(NORMAL n1,NORMAL n2);
	//////////获得向量长度
	float    GetMagnitude(NORMAL normal);
	float    GetMagnitude(VERTEX v1,VERTEX v2);
    //////////判断两向量的夹角关系 
	int      ClassifyTwoNormal(NORMAL n1,NORMAL n2);
    //////////判断两向量的夹角关系
    int      ClassifyTwoNormal(VERTEX  v1,VERTEX vCenter,VERTEX v2);

    //////////判断点与平面的关系 -1:在平面后,0:在平面上,1:在平面前
    int      ClassifyPointPlane(VERTEX point,PLANE plane);
	//////////判断多边形与平面关系 -1:在平面后,0:重合,1:在平面前,2:穿越
    int      ClassifyPolygonPlane(PLANE plane,VERTEX *pVertex,int number);

    //////////归一标准化
	NORMAL   Normalization(NORMAL normal);
	NORMAL   Normalization(double x,double y,double z);
};

#endif // !defined(AFX_CMATH_H__85CB3FA1_05CE_11D6_812C_5254AB37CDC9__INCLUDED_)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -