📄
字号:
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 + -