www.pudn.com > 林海血原源代码.zip > CMath.h
// 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);
//////////判断线段是否与标准长方形相交 true:相交,false:不相交
bool IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX va,VERTEX vb,VERTEX vc,VERTEX vd);
bool IsLineSegmentCutByStardQuad(VERTEX v1 ,VERTEX v2,VERTEX *pv);
//////////由顶点数组获得平面方程
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);
//////////获得交点的贴图坐标
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 GetNormal(VERTEX v1,VERTEX v2,VERTEX v3);
NORMAL GetNormal(float *v1,float *v2,float *v3);
//////////获得两点距离
float GetDistance(VERTEX vertex1,VERTEX vertex2);
//////////获得点到平面的距离
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);
//////////判断两向量的夹角关系
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_)