www.pudn.com > roll.rar > DYNAMIC.H


#include "stdafx.h" 
#include  
 
#define NUMPERTOOTH 6 
 
struct Tooth { 
	double x[NUMPERTOOTH]; 
	double y[NUMPERTOOTH]; 
}; 
 
class CFPoint; 
class Roller { 
	double x0,y0,fai0,fai; 
 
	int Calc_Roller(CFPoint roller[7],double r1,double r2,double& MASS,double& INERT); 
 
public: 
	Roller(double x=0.0,double y=0.0,double f0=0.0,double f=0.0) 
	{ x0=x;y0=y;fai0=f0;fai=f; teeth=NULL; } 
	~Roller() { if(teeth) delete[] teeth; } 
public: 
	int teethnum; 
	double rmax; 
	double hole,MASS,INERT; 
	Tooth *teeth; 
	int SetRollerdata(int IsUnderFirst); 
 
	void SetX0(double x) { x0=x; } 
	double GetX0( void ) { return x0; } 
 
	void SetY0(double y) { y0=y; } 
	double GetY0( void ) { return y0; } 
 
	void SetFai(double f) { fai=f; } 
	double GetFai( void ) { return fai; } 
 
	void SetFai0(double f0) { fai0=f0; } 
	double GetFai0( void ) { return fai0; } 
 
	void RotateRoller(double angle); 
 
}; 
 
class CDynWnd; 
class CDynPara; 
class CDynamic { 
 
	friend class CDynWnd; 
	CDynPara *pDynPara; 
 
	FILE *fp; //write contact point coordinates 
 
	int IsCounterClockWise; 
	int contnum1,contnum2,contrange; 
	double DrivingMoment; 
	double thickpaper,RevR0,RevR,tension; 
	double density; 
	double friction; 
	double gravity; 
	double constant; 
	double resistmoment; 
	double RevInertia; 
	double disp1,velo1,acce1; 
	double disp2,velo2,acce2; 
	double disp3,velo3,acce3; 
	double papleng1,papleng2,papleng3,papvelo1,papvelo2,papacce; 
 
	double INERT1,INERT2,INERT3; 
	double MOMENT1,MOMENT2,MOMENT30,MOMENT3; 
	double lg,xp,yp,InitRAngle; 
	double cangle1,cangle2,cangle3,cangle4; 
 
	CDynWnd *wnd; 
 
	void DetermineOrgTension(double b,double R0,double R,double v,double a,double& tension); 
	void DetermineTension(double x0,double y0,double r,double angle,double& Tension,double omiga=0.0,double epsln=0.0); 
	void DetermineConstant(double x0,double y0,double r,double angle,double Tension,double omiga=0.0,double epsln=0.0); 
	void CalcForceM(double x0,double y0,double r,double angle,double& m,double omiga=0.0,double epsln=0.0); 
	void CalcForceXY(double x0,double y0,double r,double angle,double& fx,double& fy,double omiga=0.0,double epsln=0.0); 
	void CalcPerForceMoment(double x0,double y0,double r,double starta,double enda,double Tension,double& fx,double& fy,double& moment,double omiga=0.0,double epsln=0.0); 
 
	int  DetermineContact(double time,double& cx,double& cy,double& nx1,double& ny1,double& nx2,double& ny2); 
	void DetermineInitContFM(double cx,double cy,double nx1,double ny1,double nx2,double ny2,double& M1,double& M2,double& M3); 
	void DetermineContFM(double cx,double cy,double nx1,double ny1,double nx2,double ny2,double& M1,double& M2,double& M3); 
	void DetermineToothContact(double x1[7],double y1[7],double a1[4],double x2[7],double y2[7],double a2[4],int ret[16],double x[16],double y[16]); 
	void DeterContNormal(double x1[7],double y1[7],double a1[4],double x2[7],double y2[7],double a2[4],int ret[16],double x[16],double y[16],double& nx1,double& ny1,double& nx2,double& ny2); 
 
	void radiusfun(double fai,double& r,double& drdfai); 
	void ControlFunction(double t,double *f0,double *f); 
	void Runge_Kutta(int n,double x,double* y0,double s,double* y); 
 
public: 
	CDynamic(); 
	~CDynamic(); 
 
public: 
	Roller Roller1,Roller2; 
 
	void CalcTotalForceMoment(double& Fx,double& Fy,double& Moment); 
	void CalcMaxContAngleNumber(); 
	int SetTeethData(CDynPara& dynpara); 
	void ShowDynamicRollers(CWnd *pParentWnd); 
	void HideDynamicRollers(); 
	int DynamicAnalysis(CWnd *pParentWnd); 
};