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

📄 ͹

📁 读入凸轮表
💻
📖 第 1 页 / 共 2 页
字号:
	c[0]/=b[0];
	d[0]/=b[0];
	k=1;
	do
	{
		  t=b[k]-c[k-1]*a[k];
		  c[k]/=t;
		  d[k]=(d[k]-d[k-1]*a[k])/t;
		  k++;
		  }while(k<n);
	d[n-1]=(d[n-1]-d[n-2]*a[n-1])/(b[n-1]-c[n-2]*a[n-1]);
	for(k=n-2;k>=0;k--)
		  d[k]-=c[k]*d[k+1];
	for(k=0;k<n;k++)
		  printf("\nm[%d]=%3.3f",k+1,d[k]);
	for(i=1;i<max-1;i++)
		  m[i]=d[i-1];
   

	m[0]=l;
	m[max-1]=r;



	for(pp=0;pp<3600;pp++)
	{
		fpp=pp;
		p=fpp/10;
		
		
		
		for(i=0;i<max-1;i++)
		{
			if((p>=j[i])&&(p<=j[i+1]))
			{
				u=i;
				break;
			}
		}	
		
		s=(p-j[u+1])*(p-j[u+1])*(2*p-2*j[u]+h[u])*f[u]/(h[u]*h[u]*h[u])
				+(p-j[u])*(p-j[u])*(2*j[u+1]-2*p+h[u])*f[u+1]/(h[u]*h[u]*h[u])
				+(j[u+1]-p)*(j[u+1]-p)*(p-j[u])*m[u]/(h[u]*h[u])
				+(p-j[u])*(p-j[u])*(p-j[u+1])*m[u+1]/(h[u]*h[u]);




		ss=6*(p-j[u+1])*(p-j[u+1]+h[u])*f[u]/(h[u]*h[u]*h[u])
		  +6*(p-j[u])*(h[u]-p+j[u])*f[u+1]/(h[u]*h[u]*h[u])
		  +(p-j[u+1])*(3*p-3*j[u+1]+2*h[u])*m[u]/(h[u]*h[u])
		  +(3*p-3*j[u]-2*h[u])*(p-j[u])*m[u+1]/(h[u]*h[u]);


	   sd=6*(2*p-j[u+1]-j[u])*f[u]/(h[u]*h[u]*h[u])
		  +6*(j[u+1]+j[u]-2*p)*f[u+1]/(h[u]*h[u]*h[u])
		  +(6*p-4*j[u+1]-2*j[u])*m[u]/(h[u]*h[u])
		  +(6*p-4*j[u]-2*j[u+1])*m[u+1]/(h[u]*h[u]);
		
	//r_t=45;
	//	rr=0;
	//	e=0;


		s0=sqrt(r_t*r_t-e*e);

		x=(s0+s)*sin(p*3.14/180)+e*cos(p*3.14/180);

		y=(s0+s)*cos(p*3.14/180)-e*sin(p*3.14/180);

		dxdd=(ss-e)*sin(p*3.14/180)+(s0+s)*cos(p*3.14/180);

		dydd=(ss-e)*cos(p*3.14/180)-(s0+s)*sin(p*3.14/180);

		z=dxdd/sqrt(dxdd*dxdd+dydd*dydd);

		zz=-dydd/sqrt(dxdd*dxdd+dydd*dydd);

		xx=x-rr*zz;

		yy=y-rr*z;

		cam_xx[pp]=xx;
		cam_yy[pp]=yy;



	}
	display=cam;	
	Invalidate(TRUE);
	for(i=0;i<360;i++)
	{
		cam360_xx[i]=cam_xx[i*10];
		cam360_yy[i]=cam_yy[i*10];
		sprintf(number,"%d",i);
		CSAngle[i]=number;
	}	
}

void CMyView::OnXshift() 
{
	// TODO: Add your command handler code here
	CMWheelDlg MWheelDlg;
	MWheelDlg.m_MWheelDiameter=fMWheelDiameter;
	if(MWheelDlg.DoModal()==IDOK)
	{
	}
	fMWheelDiameter=MWheelDlg.m_MWheelDiameter;
    float j[3600],h[3600],f[360],ff[3600],a[3600],b[3600],c[3600],d[3600],g[3600],l,r,m[3600],
		  s,ss,sd,p,s0,xx,yy,x,y,zz,z,fpp,dxdd,dydd;
	int max,n,k,u,pp,i=0;
	float t=0;
	max=360;
	double temp;
	FILE * file;
	file=fopen("shengcheng.txt","r");

	for(i=0;i<360;i++){
		fscanf(file,"%lf\n",&temp);
		f[i] =temp; 
	}
	fclose(file);
	for(i=0;i<max;i++)
		j[i]=i;

	//第2步
	for(i=0;i<max-1;i++)
	{

	h[i]=j[i+1]-j[i];

	ff[i]=(f[i+1]-f[i])/h[i];
	}
	//第3步(la,mu对应追赶法中a,c)
	for(i=0;i<max-2;i++)
	{
	a[i]=h[i+1]/(h[i+1]+h[i]);
	c[i]=1-a[i];

	g[i]=3*(c[i]*ff[i+1]+a[i]*ff[i]);
	}
	//构造追赶法中的b
	for(i=0;i<max-2;i++)
	{
		b[i]=2;
	}
	//最左侧导数
	l=0;
	//最右侧导数
	r=0;
	//构造追赶法中的d
	d[0]=g[0]-a[0]*l;

	for(i=1;i<max-3;i++)
	{
		d[i]=g[i];
	}

	d[max-3]=g[max-3]-c[max-3]*r;
	//追赶法中方程组个数
	n=max-2;
	//通过追赶法求m
	c[0]/=b[0];
	d[0]/=b[0];
	k=1;
	do
	{
		  t=b[k]-c[k-1]*a[k];
		  c[k]/=t;
		  d[k]=(d[k]-d[k-1]*a[k])/t;
		  k++;
		  }while(k<n);
	d[n-1]=(d[n-1]-d[n-2]*a[n-1])/(b[n-1]-c[n-2]*a[n-1]);
	for(k=n-2;k>=0;k--)
		  d[k]-=c[k]*d[k+1];
	for(k=0;k<n;k++)
		  printf("\nm[%d]=%3.3f",k+1,d[k]);
	for(i=1;i<max-1;i++)
		  m[i]=d[i-1];
   

	m[0]=l;
	m[max-1]=r;



	for(pp=0;pp<3600;pp++)
	{
		fpp=pp;
		p=fpp/10;
		
		
		
		for(i=0;i<max-1;i++)
		{
			if((p>=j[i])&&(p<=j[i+1]))
			{
				u=i;
				break;
			}
		}	
		
		s=(p-j[u+1])*(p-j[u+1])*(2*p-2*j[u]+h[u])*f[u]/(h[u]*h[u]*h[u])
				+(p-j[u])*(p-j[u])*(2*j[u+1]-2*p+h[u])*f[u+1]/(h[u]*h[u]*h[u])
				+(j[u+1]-p)*(j[u+1]-p)*(p-j[u])*m[u]/(h[u]*h[u])
				+(p-j[u])*(p-j[u])*(p-j[u+1])*m[u+1]/(h[u]*h[u]);




		ss=6*(p-j[u+1])*(p-j[u+1]+h[u])*f[u]/(h[u]*h[u]*h[u])
		  +6*(p-j[u])*(h[u]-p+j[u])*f[u+1]/(h[u]*h[u]*h[u])
		  +(p-j[u+1])*(3*p-3*j[u+1]+2*h[u])*m[u]/(h[u]*h[u])
		  +(3*p-3*j[u]-2*h[u])*(p-j[u])*m[u+1]/(h[u]*h[u]);


	   sd=6*(2*p-j[u+1]-j[u])*f[u]/(h[u]*h[u]*h[u])
		  +6*(j[u+1]+j[u]-2*p)*f[u+1]/(h[u]*h[u]*h[u])
		  +(6*p-4*j[u+1]-2*j[u])*m[u]/(h[u]*h[u])
		  +(6*p-4*j[u]-2*j[u+1])*m[u+1]/(h[u]*h[u]);
		
		//r_t=45;
//		rr=0;
//		e=0;


		s0=sqrt(r_t*r_t-e*e);

		x=(s0+s)*sin(p*3.14/180)+e*cos(p*3.14/180);

		y=(s0+s)*cos(p*3.14/180)-e*sin(p*3.14/180);

		dxdd=(ss-e)*sin(p*3.14/180)+(s0+s)*cos(p*3.14/180);

		dydd=(ss-e)*cos(p*3.14/180)-(s0+s)*sin(p*3.14/180);

		z=dxdd/sqrt(dxdd*dxdd+dydd*dydd);

		zz=-dydd/sqrt(dxdd*dxdd+dydd*dydd);

		xx=x+(fMWheelDiameter/2-rr)*zz;

		yy=y+(fMWheelDiameter/2-rr)*z;

		xshift_x[pp]=xx;
		xshift_y[pp]=yy;



	}
	display=xshift;	
	Invalidate(TRUE);
}

void CMyView::OnDisplay() 
{
	// TODO: Add your command handler code here
	char number[5];
	float fnum;
	int i;
	CDisplayDlg DisplayDlg;
	DisplayDlg.m_iCoorX=fDisplay_x;
	DisplayDlg.m_iCoorY=fDisplay_y;
	DisplayDlg.m_iScale=fDisplay_scale;
	DisplayDlg.DoModal();
	fDisplay_x=DisplayDlg.m_iCoorX;
	fDisplay_y=DisplayDlg.m_iCoorY;
	fDisplay_scale=DisplayDlg.m_iScale;
	
	fnum=int(fDisplay_x/20)+1;
	fMid_x=fnum*10;	
	for(i=fnum;i>0;i--)
	{
		sprintf(number,"-%d0",i);
		CSCoorX[int(fnum)-i]=number;
	}
	for(i=0;i<=fnum;i++)
	{
		if(i==0)
			sprintf(number,"0",i);
		else
			sprintf(number,"%d0",i);
		CSCoorX[int(fnum)+i]=number;
	}

	fnum=int(fDisplay_y/20)+1;
	fMid_y=fnum*10;		
	for(i=fnum;i>0;i--)
	{
		sprintf(number,"-%d0",i);
		CSCoorY[int(fnum)-i]=number;
	}
	for(i=0;i<=fnum;i++)
	{
		if(i==0)
			sprintf(number,"0",i);
		else
			sprintf(number,"%d0",i);
		CSCoorY[int(fnum)+i]=number;
	}
		Invalidate(TRUE);
}

void CMyView::OnSimulate() 
{
	// TODO: Add your command handler code here
	int i;
	for(i=0;i<=3600;i++)
		fxshift[i]=sqrt(xshift_x[i]*xshift_x[i]+xshift_y[i]*xshift_y[i]);
	display=simulate;
	startangle=0;
	SetTimer(1,100,NULL);
	Invalidate(TRUE);
}

void CMyView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	SetTimer(1,60000,NULL);
	CScrollView::OnLButtonDown(nFlags, point);
}

void CMyView::OnRButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	SetTimer(1,100,NULL);	
	CScrollView::OnRButtonDown(nFlags, point);
}

⌨️ 快捷键说明

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