⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dialog34.cpp

📁 本程序是一个最近邻分类算法的演示程序
💻 CPP
📖 第 1 页 / 共 3 页
字号:
// Dialog34.cpp : implementation file
//

#include "stdafx.h"
#include "最近邻法分类器.h"
#include "Dialog34.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
/////////////////////////////////////////////////////////////////////////////
// CDialog34 dialog


CDialog34::CDialog34(CWnd* pParent /*=NULL*/)
	: CDialog(CDialog34::IDD, pParent)
{
	//{{AFX_DATA_INIT(CDialog34)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON11);
}


void CDialog34::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDialog34)
	DDX_Control(pDX, IDC_LIST1, m_l);
	DDX_Control(pDX, IDC_BUTTON7, m_b7);
	DDX_Control(pDX, IDC_BUTTON6, m_b6);
	DDX_Control(pDX, IDC_BUTTON5, m_b5);
	DDX_Control(pDX, IDC_BUTTON4, m_b4);
	DDX_Control(pDX, IDC_BUTTON3, m_b3);
	DDX_Control(pDX, IDC_BUTTON2, m_b2);
	DDX_Control(pDX, IDC_BUTTON1, m_b1);
	DDX_Control(pDX, IDC_STATIC4, m_2);
	DDX_Control(pDX, IDC_STATIC3, m_1);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDialog34, CDialog)
	//{{AFX_MSG_MAP(CDialog34)
	ON_WM_ERASEBKGND()
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6)
	ON_BN_CLICKED(IDC_BUTTON7, OnButton7)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDialog34 message handlers
BOOL CDialog34::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	int cx, cy; 
    HDC dc = ::GetDC(NULL); 
   cx = GetDeviceCaps(dc,HORZRES) + 
        GetSystemMetrics(SM_CXBORDER); 
    cy = GetDeviceCaps(dc,VERTRES) +
        GetSystemMetrics(SM_CYBORDER)-20; 
    ::ReleaseDC(0,dc); //
    ::SetWindowPos(m_hWnd, HWND_TOPMOST, 
        -(GetSystemMetrics(SM_CXBORDER)+1), 
        -(GetSystemMetrics(SM_CYBORDER)+1), 
        cx+1,cy+1, SWP_NOZORDER);
	mybitmap.LoadBitmap(IDB_BITMAP1);
    CRect rect,rects,rects1,rectp,rects2,rects3,rect5,rect6;
	int tempw,temph;
	GetClientRect(rect);
    GetDlgItem(IDC_STATIC1)->GetClientRect(rects);
	temph=rects.Height();
	rects.left=rect.left;
    rects.right=rect.right;
	rects.top=rect.top;
	rects.bottom=rect.top+temph;
    GetDlgItem(IDC_STATIC1)->MoveWindow(rects,true);
	///////////////
	fb1=false,fb2=false;fb3=false;f4=false;f5=false;f7=false;f6=false;
CRect rt1,rt2,rt3,rt4,rt5,rt6,rt7;
	GetDlgItem(IDC_BUTTON1)->GetWindowRect(rt1);ScreenToClient(rt1);
	tempw=rt1.Width();
	rt1.top=rects.top+10;
    rt1.bottom=rects.bottom-10;
	rt1.left=rect.left+6;
	rt1.right=rt1.left+tempw;
    GetDlgItem(IDC_BUTTON1)->MoveWindow(rt1,true);
GetDlgItem(IDC_BUTTON2)->GetWindowRect(rt2);ScreenToClient(rt2);
	tempw=rt2.Width();
	rt2.top=rects.top+10;
    rt2.bottom=rects.bottom-10;
	rt2.left=rt1.right+6;
	rt2.right=rt2.left+tempw;
    GetDlgItem(IDC_BUTTON2)->MoveWindow(rt2,true);
GetDlgItem(IDC_BUTTON3)->GetWindowRect(rt3);ScreenToClient(rt3);
	tempw=rt3.Width();
	rt3.top=rects.top+10;
    rt3.bottom=rects.bottom-10;
	rt3.left=rt2.right+6;
	rt3.right=rt3.left+tempw;
    GetDlgItem(IDC_BUTTON3)->MoveWindow(rt3,true);
GetDlgItem(IDC_BUTTON4)->GetWindowRect(rt4);ScreenToClient(rt4);
	tempw=rt4.Width();
	rt4.top=rects.top+10;
    rt4.bottom=rects.bottom-10;
	rt4.left=rt3.right+6;
	rt4.right=rt4.left+tempw;
    GetDlgItem(IDC_BUTTON4)->MoveWindow(rt4,true);
GetDlgItem(IDC_BUTTON5)->GetWindowRect(rt5);ScreenToClient(rt5);
	tempw=rt5.Width();
	rt5.top=rects.top+10;
    rt5.bottom=rects.bottom-10;
	rt5.left=rt4.right+6;
	rt5.right=rt5.left+tempw;
    GetDlgItem(IDC_BUTTON5)->MoveWindow(rt5,true);
GetDlgItem(IDC_BUTTON6)->GetWindowRect(rt6);ScreenToClient(rt6);
	tempw=rt6.Width();
	rt6.top=rects.top+10;
    rt6.bottom=rects.bottom-10;
	rt6.left=rt5.right+6;
	rt6.right=rt6.left+tempw;
    GetDlgItem(IDC_BUTTON6)->MoveWindow(rt6,true);
GetDlgItem(IDC_BUTTON7)->GetWindowRect(rt7);ScreenToClient(rt7);
	tempw=rt7.Width();
	rt7.top=rects.top+10;
    rt7.bottom=rects.bottom-10;
	rt7.left=rt6.right+6;
	rt7.right=rt7.left+tempw;
    GetDlgItem(IDC_BUTTON7)->MoveWindow(rt7,true);
rectp.top=rects.bottom+10;
	rectp.bottom=rect.bottom-50;
	rectp.left=rect.left+10;
	rectp.right=rectp.left+600;
	GetDlgItem(IDC_STATIC2)->MoveWindow(rectp,true);
    rects1.left=rects.left+10;
	rects1.right=rects1.left+250;
	rects1.top=rectp.bottom+10;
	rects1.bottom=rects1.top+20;
    GetDlgItem(IDC_STATIC3)->MoveWindow(rects1,true);
rects2.left=rectp.right+3;
	rects2.right=rects2.left+250;
	rects2.top=rects.bottom+10;
	rects2.bottom=rects2.top+20;
    GetDlgItem(IDC_STATIC4)->MoveWindow(rects2,true);
GetDlgItem(IDC_LIST1)->GetWindowRect(rect5);ScreenToClient(rect5);
tempw=rect5.Width();temph=rect5.Height();
rect5.left= rectp.right+10+(rect.right-rectp.right)/2-tempw/2;
rect5.right=rect5.left+tempw;
 rect5.top=rects2.bottom+10;
rect5.bottom =rect5.top+2*temph-348;
GetDlgItem(IDC_LIST1)->MoveWindow(rect5,true);
GetDlgItem(IDOK2)->GetWindowRect(rect6);ScreenToClient(rect6);
tempw=rect6.Width();temph=rect6.Height();
rect6.left= rectp.right+10+(rect.right-rectp.right)/2-tempw/2;
rect6.right=rect6.left+tempw;
 rect6.top=rect5.bottom+20;;
rect6.bottom =rect6.top+temph;
GetDlgItem(IDOK2)->MoveWindow(rect6,true);
strcpy(m_2.mychar,"三个圆的半径为100,1类120,2类130,3类150,(k,k')NNR时考虑2,3类");
//////////////////////////////////
m_l.SetExtendedStyle (LVS_OWNERDRAWFIXED);
CRect ClientRect;
    GetDlgItem(IDC_LIST1)->GetClientRect(&ClientRect);
    m_l.InsertColumn (0, "圆心间距离");
    m_l.InsertColumn (1, "准确率");
     m_l.InsertColumn (2, "拒判率");
 m_l.InsertColumn (3, "错误率");
     m_l.InsertColumn (4, "运行时间");
   
     m_l.SetColumnWidth (0, ClientRect.Width() / 5+15);
    m_l.SetColumnWidth (1, ClientRect.Width() / 5-5);
     m_l.SetColumnWidth (2, ClientRect.Width() / 5-5);m_l.SetColumnWidth (3, ClientRect.Width() / 5-5);
     m_l.SetColumnWidth (4, LVSCW_AUTOSIZE_USEHEADER+100);
    for(int i=0;i<20;i++)
	{
	m_l.InsertItem (i, " ");
	}

	m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
	m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
	m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
	m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CDialog34::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	CRect rect;
		GetClientRect(rect);
       
        
//////////////////////////////////////////////////////
        CDC memdc;
		BITMAP bm1;
        mybitmap.GetObject(sizeof(BITMAP),&bm1);
		memdc.CreateCompatibleDC(pDC);
        CBitmap* oldbitmap=memdc.SelectObject(&mybitmap);
		int wide=rect.Width()/4;
		int mheight=rect.Height()/4;
	for (int j=0;j<4;j++)
	{
		for(int i=0;i<4;i++)
	{
      pDC->StretchBlt(rect.left,rect.top,wide,mheight,&memdc,0,0,bm1.bmWidth,bm1.bmHeight,SRCCOPY);
        rect.left+= wide;	
	}
	     rect.left-=wide*4;
		 rect.top+=mheight;
	}
CRect rects;GetClientRect(rect);
	GetDlgItem(IDC_STATIC1)->GetClientRect(rects);
	    for(int i=0;i<18;i++)
		{
          rects.top=rect.top+i*3;
		  rects.bottom=rects.top+3;
          pDC->FillSolidRect(rects,RGB(188+i,212+i,249));
		}
CRect rectp,rectp1; 
	CPen *pOldPen;
	GetDlgItem(IDC_STATIC2)->GetWindowRect(rectp);ScreenToClient(rectp);
	pDC->FillSolidRect(rectp,RGB(255,255,255));
    CPen mypen1(PS_SOLID,1,RGB(0,0,0));
   pOldPen=pDC->SelectObject(&mypen1);
   pDC->MoveTo(rectp.left+20, rectp.bottom-20);
   pDC->LineTo(rectp.left+20, rectp.bottom-560);
  pDC->LineTo(rectp.left+15, rectp.bottom-545);
  pDC->MoveTo(rectp.left+20, rectp.bottom-560);
   pDC->LineTo(rectp.left+25, rectp.bottom-545);
pDC->MoveTo(rectp.left+20, rectp.bottom-20);
pDC->LineTo(rectp.left+20+560, rectp.bottom-20);
pDC->LineTo(rectp.left+20+545, rectp.bottom-25);
pDC->MoveTo(rectp.left+20+560, rectp.bottom-20);
pDC->LineTo(rectp.left+20+545, rectp.bottom-15);
	if(f4)
	{
        CPoint lp[19]; 
	for(int i=0;i<19;i++)
	{
       int k=zt[i];
		
	   lp[i].x=rectp.left+70+2*(k-110);
		
		
	    lp[i].y=rectp.bottom-20-int(ct[i]*540);
	}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
	}
if(f5)
	{
        CPoint lp[19]; 
	for(int i=0;i<19;i++)
	{
       int k=zt[i];
		
	   lp[i].x=rectp.left+70+2*(k-110);
		
		
	    lp[i].y=rectp.bottom-20-int(rt[i]*540);
	}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
	}
if(f6)
	{
        CPoint lp[19]; 
	for(int i=0;i<19;i++)
	{
       int k=zt[i];
		
	   lp[i].x=rectp.left+70+2*(k-110);
		
		
	    lp[i].y=rectp.bottom-20-int(et[i]*540);
	}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
	}
if(f7)
{
   double max=0;
for(i=0;i<20;i++)
{
	if(max<tt[i])max=tt[i];
}
	CPoint lp[19]; 
	for(int i=0;i<19;i++)
	{
       int k=zt[i];
		lp[i].x=rectp.left+70+2*(k-110);
	    lp[i].y=rectp.bottom-20-int(tt[i]*540/max);
	}
CPen mypen2(PS_SOLID,2,RGB(255,0,0));
pDC->SelectObject(&mypen2);
pDC->PolyBezier(lp,19);
}
	return true;
}

void CDialog34::OnButton1() 
{
	// TODO: Add your control notification handler code here
	if(fb1 )return;
fb1=true;fb2=false;
	fb3=false;f4=false;f5=false;f6=false;f7=false;
	m_b2.down =false;
m_b3.down =false;
	m_b1.down=true;
    m_b1.Invalidate();m_b2.Invalidate();
	m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
	m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
	m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
	m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
for(int yt=0;yt<20;yt++)
		  {
			  m_l.flag[yt]=false;
		  }	
for(int i=0;i<20;i++)
	   {
	      m_l.SetItemText (i, 0, " ");
    m_l.SetItemText (i, 1, "");
    m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
  m_l.SetItemText (i, 4, " ");
   
   
	   }
    Invalidate();
    UpdateWindow();
}

void CDialog34::OnButton2() 
{
	// TODO: Add your control notification handler code here
	if(fb2 )return;
fb2=true;fb2=false;
	fb1=false;f4=false;f5=false;f6=false;f7=false;
	m_b1.down =false;
m_b3.down =false;
	m_b2.down=true;
    m_b1.Invalidate();m_b2.Invalidate();m_b3.Invalidate();
	m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
	m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
	m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
	m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
	for(int yt=0;yt<20;yt++)
		  {
			  m_l.flag[yt]=false;
		  }
for(int i=0;i<20;i++)
	   {
	      m_l.SetItemText (i, 0, " ");
    m_l.SetItemText (i, 1, "");
    m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
  m_l.SetItemText (i, 4, " ");
   
   
	   }
    Invalidate();
    UpdateWindow();
}

void CDialog34::OnButton3() 
{
	// TODO: Add your control notification handler code here
	if(fb3 )return;
fb3=true;fb2=false;
	fb1=false;f4=false;f5=false;f6=false;f7=false;
	m_b1.down =false;
m_b2.down =false;
	m_b3.down=true;
    m_b1.Invalidate();m_b2.Invalidate();m_b3.Invalidate();
	
	m_b4.flagv=true;GetDlgItem(IDC_BUTTON4)->EnableWindow(FALSE);
	m_b5.flagv=true;GetDlgItem(IDC_BUTTON5)->EnableWindow(FALSE);
	m_b6.flagv=true;GetDlgItem(IDC_BUTTON6)->EnableWindow(FALSE);
	m_b7.flagv=true;GetDlgItem(IDC_BUTTON7)->EnableWindow(FALSE);
for(int yt=0;yt<20;yt++)
		  {
			  m_l.flag[yt]=false;
		  }
	for(int i=0;i<20;i++)
	   {
	      m_l.SetItemText (i, 0, " ");
    m_l.SetItemText (i, 1, "");
    m_l.SetItemText (i, 2, "");
m_l.SetItemText (i, 3, "");
  m_l.SetItemText (i, 4, " ");
   
   
	   }
    Invalidate();
    UpdateWindow();
}

BEGIN_EVENTSINK_MAP(CDialog34, CDialog)
    //{{AFX_EVENTSINK_MAP(CDialog34)
	ON_EVENT(CDialog34, IDOK2, 1 /* Click */, OnClickOk2, VTS_NONE)
	//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()

void CDialog34::OnClickOk2() 
{
	// TODO: Add your control notification handler code here
  if(m_b1.down)
  {
	for(int i1=0;i1<20;i1++)
	{
	  
		int x,y;
		LARGE_INTEGER litmp;
LONGLONG qt1,qt2;
double dff;
QueryPerformanceFrequency(&litmp);//获得时钟频率
dff=(double)litmp.QuadPart;
QueryPerformanceCounter(&litmp);//获得初始值
    qt1=litmp.QuadPart;
		int r=300-10*i1;
		zt[i1]=r;
	   int i=0;
       
	   srand( (unsigned)time( NULL ) );
	   while(i<120)
	   {
           x=(int)(rand()%200);
			y=(int)(rand()%200)+100+r-100;
			BOOL flag=false;
		    if((x-100)*(x-100)+(y-100-r)*(y-100-r)<10000)
			{
			      for(int j=0;j<i;j++)
				  {
				        if(*(onep+2*j)==x&&*(onep+2*j+1)==y)
						{
					       flag=true;
					      j=i;
						}
				  }
			      if(!flag)
				  {
                      *(onep+2*i)=x;
                        *(onep+2*i+1)=y;i++;
				  }
			       
			}	 
	   }
//////////////////////////////////////////////////////////////////////////////
      i=0;
	   while(i<130)
	   {
           x=(int)(rand()%200);
			y=(int)(rand()%200);
			BOOL flag=false;
		    if((x-100)*(x-100)+(y-100)*(y-100)<10000)
			{
			      for(int j=0;j<i;j++)
				  {
				        if(*(towp+2*j)==x&&*(towp+2*j+1)==y)
						{
					       flag=true;
					      j=i;
						}
				  }
			      if(!flag)
				  {
                      *(towp+2*i)=x;
                        *(towp+2*i+1)=y;i++;
				  }
			       
			}	 
	   }
	   ///////////////////////////////
	   i=0;
        while(i<150)
	   {
           x=(int)(rand()%200)+int((r/2)*1.732);
			y=(int)(rand()%200);
			BOOL flag=false;
		    if((x-100-int((r/2)*1.732))*(x-100-int((r/2)*1.732))+(y-100)*(y-100)<10000)
			{
			      for(int j=0;j<i;j++)
				  {
				        if(*(threep+2*j)==x&&*(threep+2*j+1)==y)
						{
					       flag=true;
					      j=i;
						}
				  }
			      if(!flag)
				  {
                      *(threep+2*i)=x;
                        *(threep+2*i+1)=y;i++;
				  }
			       
			}	 
	   }
////////////////////////////////////////////////////////////
        i=0;
        while(i<100)
	   {
           x=(int)(rand()%200);
			y=(int)(rand()%200)+100+r-100;
			BOOL flag=false;
		    if((x-100)*(x-100)+(y-100-r)*(y-100-r)<10000)
			{
			      for(int j=0;j<i;j++)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -