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); };