📄 studydlg.cpp
字号:
temp_vector.Add(atof(data1));
}
}while(k!=-1);
if (InitMatrix==FALSE)
{
temp_matrix.Set(1,temp_vector.Size());
temp_matrix.SetLine(temp_vector,1);
InitMatrix=TRUE;
}
else
{
temp_matrix.AddLine(temp_vector);
}
temp_vector.Destroy();
}
data2=temp_matrix;
}
void CStudyDlg::DataPaint()
{
//用于绘制数据曲线;
//当绘制仿真数据时,三组数据分别为:原始信号,噪声信号,含噪信号;
//当绘制文本数据时,将绘制每一组数据;
//次函数绘制的为DrawData矩阵中数据,调用之前必须要先将此矩阵赋值;
//编写时间2006.09.27
//获取数据DataOriginal中的信息;
int column=DrawData.ColumSize(); //列数
int row=DrawData.LineSize(); //行数
//获得Dc及绘图区域;
CWnd *pWnd=GetDlgItem(IDC_Pic);
CDC *pDc=pWnd->GetDC();
CRect PicRgn;
::GetClientRect(pWnd->m_hWnd,PicRgn);
pDc->SelectStockObject(DKGRAY_BRUSH);
pDc->Rectangle(PicRgn);
CRect DrawRgn(PicRgn.left+PicRgn.Width()/12.0,PicRgn.top+PicRgn.Height()/12.0,
PicRgn.right-PicRgn.Width()/12.0,PicRgn.bottom-PicRgn.Height()/12.0); //绘图区域大小;
pDc->SelectStockObject(BLACK_BRUSH); //创建黑色的笔刷;
//矩形相关信息
double Rect_height=DrawRgn.Height()/column;//注意:此处的高度是包括矩阵间距离的
double Rech_width=DrawRgn.Width();
//针对每列数据进行图形绘制;
for (int i=0;i<column;i++)
{
//确定矩形的左上角及右下角坐标
CRect Rect(DrawRgn.left,DrawRgn.top+i*Rect_height,DrawRgn.right,
DrawRgn.top+Rect_height*(i+0.8)); //调节此处的0.8,可以调节矩阵间距的大小;
//获得左下角坐标
double Rect_ld_X=Rect.left;
double Rect_ld_Y=Rect.bottom;
//创建一支白色的笔来绘制矩形的边框
CPen Pen(PS_SOLID,1,RGB(255,255,255));
CPen *pOldpen=pDc->SelectObject(&Pen);
pDc->Rectangle(&Rect);
pDc->SelectObject(pOldpen);
//获得数据信息
vector temp_column;
temp_column.GetColum(DrawData,i+1);
int maxX=row;
int minX=1;
double maxY=temp_column.Max();
double minY=temp_column.Min();
// double IntervalX,IntervalY;
double IntervalY;
if (maxX!=minX)
{
IntervalX=Rect.Width()/double(maxX-minX);//注意:此处必须要进行强制转换,否则会出现误差;
}
else
{
IntervalX=0;//??需要考虑
}
if (maxY!=minY)
{
IntervalY=Rect.Height()/double(maxY-minY);
}
else
{
IntervalY=Rect.Height()/2.0;//??
}
CPoint point_begin;
point_begin.x=Rect.left;
point_begin.y=Rect_ld_Y-(temp_column[1]-minY)*IntervalY;//注意此处必须为"-"号;
pDc->MoveTo(point_begin);
//为不同的矩阵选择不同的画笔
CPen *pOldpen1;
CPen penRed(PS_SOLID,1,RGB(255,0,0));
CPen penGreen(PS_SOLID,1,RGB(0,255,0));
CPen penBlue(PS_SOLID,1,RGB(0,0,255));
switch(i%3) {
case 0:
pOldpen1=pDc->SelectObject(&penRed);
break;
case 1:
pOldpen1=pDc->SelectObject(&penGreen);
break;
case 2:
pOldpen1=pDc->SelectObject(&penBlue);
break;
default:;
}
//开始绘制曲线
CPoint point_mid;
for (int j=1;j<row;j++)
{
point_mid.x=Rect.left+j*IntervalX;
point_mid.y=Rect_ld_Y-(temp_column[j+1]-minY)*IntervalY;
pDc->LineTo(point_mid);
}
//释放资源
pDc->SelectObject(pOldpen1);
}
CPen penYellow(PS_SOLID,1,RGB(255,255,0));
CPen *pOldpen2=pDc->SelectObject(&penYellow);
if (Cut_X_Y.x!=0)
{
pDc->MoveTo(Cut_X_Y.x,DrawRgn.top);
pDc->LineTo(Cut_X_Y.x,(DrawRgn.Height()+DrawRgn.top)*(1.0-1.0/(5*column)));
}
if(Cut_X_Y.y!=0)
{
pDc->MoveTo(Cut_X_Y.y,DrawRgn.top);
pDc->LineTo(Cut_X_Y.y,(DrawRgn.Height()+DrawRgn.top)*(1.0-1.0/(5*column)));
}
pDc->SelectObject(pOldpen2);
pWnd->ReleaseDC(pDc);
}
HBRUSH CStudyDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
// TODO: Return a different brush if the default is not desired
return hbr;
}
void CStudyDlg::OnButton3()
{
// TODO: Add your control notification handler code here
CWnd *pWnd=GetDlgItem(IDC_Pic);
CDC *pDc=pWnd->GetDC();
CRect PicRgn;
::GetClientRect(pWnd->m_hWnd,PicRgn);
pDc->SelectStockObject(DKGRAY_BRUSH);
pDc->Rectangle(PicRgn);
pWnd->ReleaseDC(pDc);
IsCreat=FALSE;
}
void CStudyDlg::OnButton1()
{
// CFileDialog FDlg(TRUE);
// FDlg.m_ofn.lpstrFilter=("text Files(*.txt)\0*.txt\0所有文件(*.*)\0*.*\0\0");
//
// if (IDOK==FDlg.DoModal())
// {
// matrix a(2,2),b(2,1),c(1,2);
// a.Init(0.0,1.0,-2.0,-3.0);
// b.Init(0.0,1.0);
// c.Init(1.0,0.0);
//
// vector u,y,Init(2);
// Init.Init(0.0,0.0);
// Load(FDlg.GetFileName(),DataOriginal);
// u.GetColum(DataOriginal,1);
// wavelet.RungeKuttaConstStep(u,y,a,b,c,Init);
// y.Print(16);
// }
//vector u(100),y;
//u.Const(1.0);
// wavelet.Runge_Kutta(u,y,-2.0,-3.0,1.0,0.0,0.0);
// y.Print();
vector data;
data.GetColum(DataOriginal,3);
//data.Print(16);
//data.GetColum(DataOriginal,3);
//data.Const(1.0);
wavelet.wavedec(data,5,"db",8);
//wavelet.dwt(data,"db",6);
//wavelet.idwt(wavelet.cA,wavelet.cD,wavelet.Lo_R,wavelet.Hi_R,"per");
wavelet.wdencmp("hard");
//wavelet.waverec(wavelet.wavedec_C,wavelet.wavedec_L);
DrawData.AddColum(wavelet.Re_Data);
DrawData.DelColum(2);
DataPaint();
}
void CStudyDlg::OnButton4()
{
// TODO: Add your control notification handler code here
UpdateData();
CButton* pCheck=(CButton*)GetDlgItem(IDC_CHECK1);
if (pCheck->GetCheck())
{
//获得所要分解的数据;
vector data;
data.GetColum(DataOriginal,atoi(m_numofdata));
wavelet.wavedec(data,atoi(m_noLayer),m_wavetype,atoi(m_num),"per");
}
else
{
vector data;
data.GetColum(DataOriginal,3);
wavelet.wavedec(data,atoi(m_noLayer),m_wavetype,atoi(m_num),"per");
}
((CComboBox *)GetDlgItem(IDC_COMBO9))->ResetContent();//将所有数据从组合框中删除;
CString ii;
//for (int i=1;i<=4;i++)
for (int i=1;i<=atoi(m_noLayer);i++)
{
ii.Format("%d",i); //此函数将int转化成CString型;
((CComboBox *)GetDlgItem(IDC_COMBO9))->AddString(ii);
}
((CComboBox *)GetDlgItem(IDC_COMBO9))->SetCurSel(atoi(m_noLayer)-1);
//CoefSelect(atoi(m_noLayer), atoi(m_noLayer));
GetDlgItem(IDC_BUTTON6)->EnableWindow(true);
}
void CStudyDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CWnd *pWnd=GetDlgItem(IDC_Pic);
CDC *pDc=pWnd->GetDC();
CRect PicRgn;
::GetClientRect(pWnd->m_hWnd,PicRgn);
CRect DrawRgn(PicRgn.left+PicRgn.Width()/12.0,PicRgn.top+PicRgn.Height()/12.0,
PicRgn.right-PicRgn.Width()/12.0,PicRgn.bottom-PicRgn.Height()/12.0);
Draw_X=DrawRgn.left;
CRect rect,rect1;
GetDlgItem(IDC_Pic)->GetWindowRect(rect);
::GetCursorPos(&point);
//rect1.left=rect.left+DrawRgn.left;
rect1.left=rect.left+PicRgn.Width()/12.0;
rect1.top=rect.top;
//rect1.right=rect1.left+rect1.Width();
rect1.right=rect.right-PicRgn.Width()/12.0;
rect1.bottom=rect.bottom;
if(rect1.PtInRect(point))
{
vector temp(1);
temp[1]=point.x-rect.left;
if (Cut_X_Y.x==0)
{
Cut_X_Y.x=temp[1];
DataPaint();
}
else if(Cut_X_Y.y==0)
{
Cut_X_Y.y=temp[1];
DataPaint();
}
else
{
Cut_X_Y.x=0;
Cut_X_Y.y=0;
DataPaint();
}
}
CDialog::OnLButtonDblClk(nFlags, point);
}
void CStudyDlg::OnButton5()
{
// TODO: Add your control notification handler code here
wavelet.waverec(wavelet.wavedec_C,wavelet.wavedec_L);
}
void CStudyDlg::OnCut()
{
// TODO: Add your control notification handler code here
int start,stop;
if (Cut_X_Y.x>Cut_X_Y.y)
{
int temp;
temp=Cut_X_Y.x;
Cut_X_Y.x=Cut_X_Y.y;
Cut_X_Y.y=temp;
}
start=(Cut_X_Y.x-Draw_X)/IntervalX;
stop=(Cut_X_Y.y-Draw_X)/IntervalX;
matrix temp;
temp.GetLineBlock(DrawData,start,stop);
DrawData=temp;
Cut_X_Y=(0,0);
DataOriginal=DrawData;
DataPaint();
}
void CStudyDlg::CoefSelect(int L,int i)
{
if (L==i)
{
vector temp;
DrawData.Set(wavelet.wavedec_L[1],1);
temp.GetLeft(wavelet.wavedec_C,wavelet.wavedec_L[1]);
DrawData.AddColum(temp);
temp.GetMid(wavelet.wavedec_C,wavelet.wavedec_L[1]+1,wavelet.wavedec_L[2]);
DrawData.AddColum(temp);
DrawData.DelColum(1);
DataPaint();
}
else
{ int len=0;
for (int j=1;j<=L+1-i;j++)
{
len+=wavelet.wavedec_L[j];
}
vector temp;
temp.GetMid(wavelet.wavedec_C,len+1,wavelet.wavedec_L[L+2-i]);
DrawData.Set(wavelet.wavedec_L[L+2-i],1);
DrawData.AddColum(temp);
DrawData.DelColum(1);
DataPaint();
}
}
void CStudyDlg::OnEditchangeCombo9()
{
// TODO: Add your control notification handler code here
// CoefSelect(atoi(m_noLayer), atoi(m_Coef));
}
void CStudyDlg::OnDenoise()
{
// TODO: Add your control notification handler code here
if (m_type==0)
{
wavelet.wdencmp("soft");
}
else
{
wavelet.wdencmp("hard");
}
CButton* pCheck=(CButton*)GetDlgItem(IDC_CHECK1);
UpdateData();
vector temp;
if (pCheck->GetCheck())
{
DrawData.Set(DataOriginal.LineSize(),1);
DrawData.AddColum(temp.GetColum(DataOriginal,atoi(m_numofdata)));
DrawData.AddColum(wavelet.Re_Data);
DrawData.DelColum(1);
}
else
{
DrawData.Set(DataOriginal.LineSize(),1);
DrawData.AddColum(temp.GetColum(DataOriginal,1));
DrawData.AddColum(temp.GetColum(DataOriginal,3));
DrawData.AddColum(wavelet.Re_Data);
DrawData.DelColum(1);
}
DataPaint();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -