📄 zhangjg_dspview.cpp
字号:
{
// TODO: Add your command handler code here
m_Test=TRUE;
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
CExpression expression;
CTriangle Dlg;
Dlg.m_n=8;
if (Dlg.DoModal() != IDOK)
{
// 返回
return;
}
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
pDoc->X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(int i=0;i<=pDoc->m_N-1;i++)
{
pDoc->X[i]=0;
} //置零;
X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(i=0;i<=pDoc->m_N-1;i++)
{
X[i]=0;
} //置零;
expression.Triangle(pDoc->m_n,pDoc->X);
memcpy(X, pDoc->X, sizeof(double) * pDoc->m_n); //copy pDoc->X to X,use X for show;
flag=1; //show modle;
stepx=(int)900/pDoc->m_n;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
pDoc->UpdateAllViews(NULL);//更新视图
}
void CZhangjg_dspView::OnAttenuationsin()
{
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
CExpression expression;
CAttenuation_Sin Dlg;
Dlg.m_a=0.1; //初始化;
Dlg.m_f=0.0625;
// Dlg.m_N=32;
Dlg.m_n=16;
if (Dlg.DoModal() != IDOK)
{
// 返回
return;
}
switch (Dlg.flag)
{
case 1:
m_a=0.1;
m_f=0.0625;
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
break;
case 2:
m_a=0.1;
m_f=0.4375;
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
break;
case 3:
m_a=0.1;
m_f=0.5625;
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
break;
default :
m_a=Dlg.m_a;
m_f=Dlg.m_f;
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
break;
}
pDoc->X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(int i=0;i<=pDoc->m_N-1;i++)
{
pDoc->X[i]=0;
} //置零;
X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(i=0;i<=pDoc->m_N-1;i++)
{
X[i]=0;
} //置零;
expression.AttenuationSin(pDoc->m_n,m_a,m_f,pDoc->X);
memcpy(X, pDoc->X,sizeof(double)*pDoc->m_N); //copy pDoc->X to X,use X for show;
stepx=(int)900/pDoc->m_N;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
flag=1; //show modle;
pDoc->UpdateAllViews(NULL);//更新视图
// delete X; //在消息响应函数里面注销内存; why can not delete X;
m_Test=TRUE;
}
void CZhangjg_dspView::OnFft()
{
if(m_Test!=TRUE)
{
AfxMessageBox("请先选择序历!!!");
return;
}
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
CExpression expression;
CTransformRegion Dlg;
Dlg.m_N=16;
if (Dlg.DoModal() != IDOK)
{
// 返回
return;
}
pDoc->m_N=Dlg.m_N;
if(pDoc->X!=NULL)
{
long Test=1;
M=0;
while(Test<pDoc->m_N) //补零;
{
M++;
Test=Test*2;
}
long NewN;
NewN=1<<M; //new length;
pDoc->FD = new complex<double>[NewN]; //初始数据;
for(int i=0;i<=NewN-1;i++)
{
if(i<=pDoc->m_n-1)
pDoc->FD[i]=complex<double>(pDoc->X[i],0); //赋值;
else
pDoc->FD[i]=complex<double>(0,0); //补零;
}
AF=new double[pDoc->m_N];
//开辟内存,存储初值数组长度;and to store the worked data,use for showing;
for(i=0;i<=pDoc->m_N-1;i++)
{
AF[i]=0;
} //置零;
if(m_Fourierflag==2)
expression.Dft(pDoc->FD,M);
else
expression.Fft(pDoc->FD,M);
for(i=0;i<=pDoc->m_N-1;i++)
{
AF[i]=sqrt(pDoc->FD[i].real() * pDoc->FD[i].real()
+ pDoc->FD[i].imag() * pDoc->FD[i].imag());
}
//memcpy(X, pDoc->X,sizeof(double)*pDoc->m_N);
flag=3; //show modle;
stepx=(int)1000/pDoc->m_N;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
pDoc->UpdateAllViews(NULL);//更新视图
}
m_Test=FALSE;
m_Fourierflag=0;
}
void CZhangjg_dspView::OnDft()
{
// TODO: Add your command handler code here
m_Fourierflag=2;
CZhangjg_dspView::OnFft();
}
void CZhangjg_dspView::OnRectangle()
{
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
CRectangle Dlg;
CExpression expression;
// Dlg.m_N=32;
Dlg.m_n=4;
if (Dlg.DoModal() != IDOK)
{
// 返回
return;
}
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
pDoc->X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(int i=0;i<=pDoc->m_N-1;i++)
{
pDoc->X[i]=0;
} //置零;
X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(i=0;i<=pDoc->m_N-1;i++)
{
X[i]=0;
} //置零;
expression.Rectangle(pDoc->m_N,pDoc->X);
memcpy(X, pDoc->X,sizeof(double)*pDoc->m_N); //copy pDoc->X to X,use X for show;
flag=1; //show modle;
stepx=(int)900/pDoc->m_N;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
pDoc->UpdateAllViews(NULL);//更新视图
//delete X; //在消息响应函数里面注销内存; why can not do it ;;
m_Test=TRUE;
}
void CZhangjg_dspView::OnFourier()
{
if(m_Test!=TRUE)
{
AfxMessageBox("请先选择序历!!!");
return;
}
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
complex<double> Fourier,Temple;
stepx=(int)900/7;
FourierLength=2*PI*stepx;
X=new double[FourierLength];
for(int w=0;w<=FourierLength-1;w++) //进行付立叶计算;
{
Fourier=complex<double>(0,0);
for(int n=0;n<=pDoc->m_N-1;n++)
{
double Angle;
Angle=(double)n*(w+1)/stepx;
Temple=complex<double>(pDoc->X[n]*exp(complex<double>(0,-Angle)));
Fourier=Fourier+Temple;
}
X[w]=sqrt(Fourier.real()*Fourier.real()+ Fourier.imag()*Fourier.imag());
}
flag=2; //show modle;
stepx=(int)900/7;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
pDoc->UpdateAllViews(NULL);//更新视图
// delete X; //在消息响应函数里面注销内存;why can not do it;
}
void CZhangjg_dspView::OnMouseMove(UINT nFlags, CPoint point)
{
m_CurPos=point;
CScrollView::OnMouseMove(nFlags, point);
}
void CZhangjg_dspView::OnUpdateCoorX(CCmdUI *pCmdUI)
{
CString s;
s.Format("X:%f",(float)(m_CurPos.x-pointx)/stepx);
pCmdUI->SetText(s);
}
void CZhangjg_dspView::OnUpdateCoorY(CCmdUI *pCmdUI)
{
CString s;
s.Format("Y:%f",(float)(pointy-m_CurPos.y)/stepy);
pCmdUI->SetText(s);
}
void CZhangjg_dspView::OnRetriangle()
{
// TODO: Add your command handler code here
m_Test=TRUE;
CZhangjg_dspDoc *pDoc=GetDocument();//获取活动文档的指针;
CExpression expression;
CTriangle Dlg;
Dlg.m_n=8;
if (Dlg.DoModal() != IDOK)
{
// 返回
return;
}
pDoc->m_N=Dlg.m_n;
pDoc->m_n=Dlg.m_n;
pDoc->X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(int i=0;i<=pDoc->m_N-1;i++)
{
pDoc->X[i]=0;
} //置零;
X=new double[pDoc->m_N]; //开辟内存,存储初值数组长度;
for(i=0;i<=pDoc->m_N-1;i++)
{
X[i]=0;
} //置零;
expression.ReTriangle(pDoc->m_n,pDoc->X);
memcpy(X, pDoc->X, sizeof(double) * pDoc->m_n); //copy pDoc->X to X,use X for show;
flag=1; //show modle;
stepx=(int)900/pDoc->m_n;
stepy=50;
pointx=50;
pointy=500; //coordinate following;
pDoc->UpdateAllViews(NULL);//更新视图
}
void CZhangjg_dspView::OnRectanglesy2()
{
// TODO: Add your command handler code here
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -