Return TRUE; // return TRUE unless you set the focus to a control
}
Void CLaba1Dlg::OnPaint()
{
If (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
Else
{
CDialog::OnPaint();
}
}
HCURSOR CLaba1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
using namespace Chart;
/*
Void CLaba1Dlg::OnBnClickedButtonSetfunc()
{
CSetFuncDlg dlg;
dlg.DoModal();
chart1.GetSeriesList()->DeleteAll();
CSeries* pSer = new CSeries(dlg.m_arrX.GetData(), dlg.m_arrY.GetData(), dlg.m_nCount);
chart1.m_grid.SetDelta(SizeF(dlg.m_fDeltaX,dlg.m_fDeltaX));
chart1.GetSeriesList()->Add(pSer);
}
Void CLaba1Dlg::OnBnClickedButtonSetnoise()
{
CNoiseDlg dlg;
dlg.DoModal();
chart2.GetSeriesList()->DeleteAll();
CSeries* pSer = new CSeries(dlg.m_arrX.GetData(), dlg.m_arrY.GetData(), theApp.count);
//chart2.m_grid.SetDelta(SizeF(dlg.m_fDeltaX,dlg.m_fDeltaX));
chart2.GetSeriesList()->Add(pSer);
}
*/
Void CLaba1Dlg::OnLbnSelchangeListFunctions()
{
if(init) MakePureSignal();
}
//-----------------------------------------------------------
Inline float uniform(float lo, float hi)
{
return rand()/(float)RAND_MAX * (hi-lo) + lo;
}
float normal(float lo, float hi, float Sigma, float MathExp = 0.0f)
{
float Sum = 0.0f, R;
for(int i = 0; i<12; i++)
Sum+=uniform(0,1);
R = ((Sum - 6)*Sigma+MathExp);
return R;
}
//-------------------------------------------------------------
Void CLaba1Dlg::MakePureSignal()
{
CString str;
UpdateData();
m_pureSignal.RemoveAll();
m_pureSignal.SetSize(m_nCount);
int i;
Switch(m_FuncList.GetCurSel())
{
case 0://"sin(x)"
for(i=0;i<m_nCount;i++)
{
m_pureSignal[i].Y = sin(m_pureSignal[i].X=i*m_fStep);
}
break;
case 1://"sin(x)+0.5*cos(x)"
|
|
for(i=0;i<m_nCount;i++)
{
m_pureSignal[i].X = i*m_fStep;
m_pureSignal[i].Y = sin(m_pureSignal[i].X)+0.5*cos(m_pureSignal[i].X);
}
}
for(i=0;i<m_nCount;i++)
{
str.Format("%d",i);
m_PointList.InsertItem(i, str);
str.Format("%3.3f", m_pureSignal[i].X);
m_PointList.SetItemText(i,1, str);
str.Format("%3.3f", m_pureSignal[i].Y);
m_PointList.SetItemText(i,2,str);
}
chart1.GetSeriesList()->DeleteAll();
CSeries* pSer = new CSeries(m_pureSignal.GetData(), m_nCount);
//chart1.m_grid.SetDelta(SizeF(m_fStep,m_fStep));
chart1.GetSeriesList()->Add(pSer);
}
Void CLaba1Dlg::OnEnChangeEditCount()
{
if(init) MakePureSignal();
}
Void CLaba1Dlg::OnEnChangeEditStep()
{
MakePureSignal();
}
Void CLaba1Dlg::MakeNoise(void)
{
int i;
UpdateData();
m_Noise.RemoveAll();
m_Noise.SetSize(m_nCount);
Switch(GetCheckedRadioButton(IDC_RADIO_NORMAL, IDC_RADIO_UNIFORM))
{
case IDC_RADIO_UNIFORM:
for(i=0;i<m_nCount;i++)
{
m_Noise[i].X = m_fStep*i;
m_Noise[i].Y = uniform(m_fLow, m_fHigh);
}
break;
case IDC_RADIO_NORMAL:
for(i=0;i<m_nCount;i++)
{
m_Noise[i].X = m_fStep*i;
float r;
/* do
{
r = normal(m_fLow, m_fHigh, m_fDev);
} while(r>m_fHigh||r<m_fLow);*/
r = normal(m_fLow, m_fHigh, m_fDev);
if(r>m_fHigh) r = m_fHigh;
else if(r<m_fLow) r = m_fLow;
else ;
m_Noise[i].Y = r;
}
break;
default: return;
}
chart2.GetSeriesList()->DeleteAll();
CSeries* pSer = new CSeries(m_Noise.GetData(), m_nCount);
|
|
chart2.GetSeriesList()->Add(pSer);
}
Void CLaba1Dlg::OnBnClickedRadioNormal()
{
MakeNoise();
}
Void CLaba1Dlg::OnBnClickedRadioUniform()
{
MakeNoise();
}
Void CLaba1Dlg::OnBnClickedButtonMesh()
{
m_jammedSignal.RemoveAll();
m_jammedSignal.SetSize(m_nCount);
for(int i=0;i<m_nCount;i++)
{
m_jammedSignal[i].X = m_pureSignal[i].X;
m_jammedSignal[i].Y = m_pureSignal[i].Y + m_Noise[i].Y;
}
CSeries* pSer = new CSeries(m_jammedSignal.GetData(), m_nCount);
pSer->SetColor(Gdiplus::Color::Red);
chart1.GetSeriesList()->Add(pSer);
not_filtered = true;
}
Void CLaba1Dlg::OnBnClickedButtonFilter()
{
k=0;
GetDlgItem(IDC_BUTTON_FILTER)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);
OnTimer(1);
SetTimer(1, 500, NULL);
}
Void CLaba1Dlg::OnBnClickedButtonStop()
{
KillTimer(1);
GetDlgItem(IDC_BUTTON_FILTER)->EnableWindow(TRUE);
GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);
float S=0.f;
for(int i=0;i<m_nCount;i++)
S+=(m_Signal[i].Y - m_pureSignal[i].Y)*(m_Signal[i].Y - m_pureSignal[i].Y);
CString str;
str.Format("Отклонение: %f",S);
AfxMessageBox(str);
}
Void CLaba1Dlg::Filter()
{
If(not_filtered)
{
m_Signal.RemoveAll();
m_Signal.SetSize(m_nCount);
//m_Signal.Append(m_jammedSignal);
not_filtered=false;
}
for(int i=1;i<m_nCount;i++)
{
m_Signal[i].X = m_fStep*i;
m_Signal[i].Y = (m_jammedSignal[i-1].Y + m_jammedSignal[i].Y)/2;
}
m_jammedSignal.Copy(m_Signal);
for(int i=m_nCount-1;i>0;i--)
{
m_Signal[i].X = m_fStep*i;
m_Signal[i].Y = (m_jammedSignal[i-1].Y + m_jammedSignal[i].Y)/2;
}
m_jammedSignal.Copy(m_Signal);
/*
m_jammedSignal.Add(PointF(m_nCount*m_fStep, 0));
m_jammedSignal.Add(PointF((m_nCount+1)*m_fStep, 0));
for(int i=0;i<m_nCount;i++)
{
|
|
m_Signal[i].X = m_fStep*i;
m_Signal[i].Y = (m_jammedSignal[i].Y + m_jammedSignal[i+1].Y + m_jammedSignal[i+2].Y)/3;
}
m_jammedSignal.Copy(m_Signal);
*/
chart1.GetSeriesList()->DeleteAll();
CSeries* pSer = new CSeries(m_Signal.GetData(), m_nCount);
pSer->SetColor(Gdiplus::Color::Green);
chart1.GetSeriesList()->Add(pSer);
pSer = new CSeries(m_pureSignal.GetData(), m_nCount);
pSer->SetColor(Gdiplus::Color::Black);
chart1.GetSeriesList()->Add(pSer);
}
Дата добавления: 2018-08-06; просмотров: 171; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!