📄 线性分类器dlg.cpp
字号:
BOOL ft1=true;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
t++;
}
}//
}//w
}
if(m==2)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
else
{
if(t%2==0)
{
double xt,yt,z;
xt=((double)(*(onep+t)))/10;
yt=((double)(*(onep+t+1)))/10;
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
}
else
{
double xt,yt,z;
xt=((double)(*(towp+(t-1))))/10;
yt=((double)(*(towp+t)))/10;
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
}
t++;
}
}//w
}
}
if(fa2)
{
//////////////////////////////////////////
if(m==0)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
if(t<50)
{
double xt,yt,z;
xt=((double)(*(onep+2*t)))/10;
yt=((double)(*(onep+2*t+1)))/10;
/*if(w2<=0)
{
w1=-w1;
w2=-w2;w4=-w4;
}*/
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(-z/(xt*xt+yt*yt+1))+1;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
t++;
}
else
{
if(t>=50&&t<100)
{
double xt,yt,z;
xt=((double)(*(towp+2*(t-50))))/10;
yt=((double)(*(towp+2*(t-50)+1)))/10;
/*if(w2<=0)
{
w1=-w1;
w2=-w2;
w4=-w4;
}*/
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(z/(xt*xt+yt*yt+1))+1;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
t++;
}
}//
}//w
}//i
if(m==1)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
if(t<50)
{
double xt,yt,z;
xt=((double)(*(towp+2*t)))/10;
yt=((double)(*(towp+2*t+1)))/10;
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(z/(xt*xt+yt*yt+1))+1;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
t++;
}
else
{
if(t>=50&&t<100)
{
double xt,yt,z;
xt=((double)(*(onep+2*(t-50))))/10;
yt=((double)(*(onep+2*(t-50)+1)))/10;
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(-z/(xt*xt+yt*yt+1))+1;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
t++;
}
}//
}//w
}
if(m==2)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
else
{
if(t%2==0)
{
double xt,yt,z;
xt=((double)(*(onep+t)))/10;
yt=((double)(*(onep+t+1)))/10;
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(-z/(xt*xt+yt*yt+1))+1;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
}
else
{
double xt,yt,z;
xt=((double)(*(towp+(t-1))))/10;
yt=((double)(*(towp+t)))/10;
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(int)(z/(xt*xt+yt*yt+1))+1;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
}
t++;
}
}//w
}
//////////////////////////////////////////////////
}
if(fa3)
{
/////////////////////////////////////////////////
if(m==0)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
if(t<50)
{
double xt,yt,z;
xt=((double)(*(onep+2*t)))/10;
yt=((double)(*(onep+2*t+1)))/10;
/*if(w2<=0)
{
w1=-w1;
w2=-w2;w4=-w4;
}*/
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(-z/(xt*xt+yt*yt+1))*1.4;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
t++;
}
else
{
if(t>=50&&t<100)
{
double xt,yt,z;
xt=((double)(*(towp+2*(t-50))))/10;
yt=((double)(*(towp+2*(t-50)+1)))/10;
/*if(w2<=0)
{
w1=-w1;
w2=-w2;
w4=-w4;
}*/
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(z/(xt*xt+yt*yt+1))*1.4;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
t++;
}
}//
}//w
}//i
if(m==1)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
if(t<50)
{
double xt,yt,z;
xt=((double)(*(towp+2*t)))/10;
yt=((double)(*(towp+2*t+1)))/10;
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(z/(xt*xt+yt*yt+1))*1.4;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
t++;
}
else
{
if(t>=50&&t<100)
{
double xt,yt,z;
xt=((double)(*(onep+2*(t-50))))/10;
yt=((double)(*(onep+2*(t-50)+1)))/10;
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(-z/(xt*xt+yt*yt+1))*1.4;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
t++;
}
}//
}//w
}
if(m==2)
{
while(ft)
{//w
if(t>=100)
{
t++;
ft=false;
}
else
{
if(t%2==0)
{
double xt,yt,z;
xt=((double)(*(onep+t)))/10;
yt=((double)(*(onep+t+1)))/10;
z=xt*w1+yt*w2+w4;
if(z<=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(-z/(xt*xt+yt*yt+1))*1.4;
w1=w1+a*xt;
w2=w2+a*yt;
w4=w4+a;
}
}
else
{
double xt,yt,z;
xt=((double)(*(towp+(t-1))))/10;
yt=((double)(*(towp+t)))/10;
z=xt*w1+yt*w2+w4;
if(z>=0)
{
fg=true;
ft=false;
BOOL ft1=true;
a=(z/(xt*xt+yt*yt+1))*1.4;
w1=w1-a*xt;
w2=w2-a*yt;
w4=w4-a;
}
}
t++;
}
}//w
}
//////////////////////////////////////////////////
}
if(t<100)
{
CRect rectl;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectl);ScreenToClient(rectl);
InvalidateRect(rectl,true);
SetTimer(1,1000,NULL);
}
else
{
if(fg)
{
SetTimer(1,1000,NULL);
t=0;
if(!ft)
{
CRect rectl;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectl);ScreenToClient(rectl);
InvalidateRect(rectl,true);
}
}
else
{
CRect rect;
strcpy(m_z.mychar,"");
t=0;
GetDlgItem(IDC_STATICz)->GetWindowRect(rect);ScreenToClient(rect);
InvalidateRect(rect,true);
m_b2.flagv=false;GetDlgItem(IDC_BUTTON1)->EnableWindow(true);
m_b3.flagv=false;GetDlgItem(IDC_BUTTON2)->EnableWindow(true);
m_b4.flagv=false;GetDlgItem(IDC_BUTTON3)->EnableWindow(true);
m_b5.flagv=false;GetDlgItem(IDC_BUTTON4)->EnableWindow(true);
}
}
CDialog::OnTimer(nIDEvent);
}
void CMyDlg::OnButton4()
{
// TODO: Add your control notification handler code here
flag1=false;
m_b5.flagT=true;
if(flag2)
{
return;
}
if(flagd)
{
flag2=true;
CRect rectl1,rect1;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectl1);ScreenToClient(rectl1);
InvalidateRect(rectl1,true);
strcpy(m_z.mychar,"生成检测点完毕");
GetDlgItem(IDC_STATICz)->GetWindowRect(rect1);ScreenToClient(rect1);
InvalidateRect(rect1,true);
m_b6.flagv=false;GetDlgItem(IDC_BUTTON5)->EnableWindow(true);
m_b7.flagv=false;GetDlgItem(IDC_BUTTON6)->EnableWindow(true);
return;
}
flag2=true;
int i1=0,i2=0;
int x,y;
/* Seed the random-number generator with current time so that
* the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );
while((i1<100))
{
x=(int)(rand()%350);
y=(int)(rand()%350);
if((y>x))
{
*(onetp+2*i1)=x;
*(onetp+2*i1+1)=y;
i1++;
}
}
while((i2<100))
{
x=(int)(rand()%350);
y=(int)(rand()%350);
if((y<x))
{
*(towtp+2*i2)=x;
*(towtp+2*i2+1)=y;
i2++;
}
}
CRect rectl,rect;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectl);ScreenToClient(rectl);
InvalidateRect(rectl,true);
strcpy(m_z.mychar,"生成检测点完毕");
GetDlgItem(IDC_STATICz)->GetWindowRect(rect);ScreenToClient(rect);
InvalidateRect(rect,true);
m_b6.flagv=false;GetDlgItem(IDC_BUTTON5)->EnableWindow(true);
m_b7.flagv=false;GetDlgItem(IDC_BUTTON6)->EnableWindow(true);
}
void CMyDlg::OnButton5()
{
// TODO: Add your control notification handler code here
CDialogT dlg;
for(int i1=0;i1<200;i1++)
{
dlg.onetp[i1]=onetp[i1];
dlg.towtp[i1]=towtp[i1];
}
dlg.DoModal();
}
void CMyDlg::OnButton2()
{
// TODO: Add your control notification handler code here
CDialogA dlg;
fa1=false;fa2=true;fa3=false;dlg.m=m;
if(dlg.DoModal()==IDOK)
{
bool f=true;
m_b5.down=false;
m_b5.Invalidate();
m_b6.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(false);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
if(f)
{
m_b3.down=false;
m_b3.Invalidate();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
w1=(double)atoi(dlg.m_w1);
w2=(double)atoi(dlg.m_w2);
w4=(double)atoi(dlg.m_w4);
if(w2<=0)
{
w1=-w1;w2=-w2;w4=-w4;
}
flag1=true;flag2=false;
flagl=true;
CRect rectldj,rectl;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectldj);ScreenToClient(rectldj);
InvalidateRect(rectldj,true);
GetDlgItem(IDC_STATICz)->GetWindowRect(rectl);ScreenToClient(rectl);
strcpy(m_z.mychar,"正在学习中");
InvalidateRect(rectl,true);
SetTimer(1,1000,NULL);
}
}
}
void CMyDlg::OnButton3()
{
// TODO: Add your control notification handler code here
CDialogP dlg;
fa1=false;fa2=false;fa3=true;dlg.m=m;
if(dlg.DoModal()==IDOK)
{
bool f=true;
m_b5.down=false;
m_b5.Invalidate();
m_b6.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(false);
m_b7.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
if(f)
{
m_b4.down=false;
m_b4.Invalidate();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON2)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON3)->EnableWindow(FALSE);
w1=(double)atoi(dlg.m_w1);
w2=(double)atoi(dlg.m_w2);
w4=(double)atoi(dlg.m_w4);
if(w2<=0)
{
w1=-w1;w2=-w2;w4=-w4;
}
flag1=true;flag2=false;
flagl=true;
CRect rectldj,rectl;
GetDlgItem(IDC_STATIC2)->GetWindowRect(rectldj);ScreenToClient(rectldj);
InvalidateRect(rectldj,true);
GetDlgItem(IDC_STATICz)->GetWindowRect(rectl);ScreenToClient(rectl);
strcpy(m_z.mychar,"正在学习中");
InvalidateRect(rectl,true);
SetTimer(1,1000,NULL);
}
}
}
void CMyDlg::OnButton6()
{
// TODO: Add your control notification handler code here
CDialogS dlg;
for(int i1=0;i1<100;i1++)
{
dlg.onep[i1]=onep[i1];
dlg.towp[i1]=towp[i1];
}
for(int i2=0;i2<200;i2++)
{
dlg.onetp[i2]=onetp[i2];
dlg.towtp[i2]=towtp[i2];
}
dlg.m_b1.down=true;
dlg.DoModal();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -