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

📄 k_averageview.cpp

📁 简单的模式识别的分类算法(K_均值算法),包含样本数据和实验结果。
💻 CPP
字号:
// K_averageView.cpp : implementation of the CK_averageView class
//

#include "stdafx.h"
#include "K_average.h"

#include "K_averageDoc.h"
#include "K_averageView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#define COLOR_R  15
#define COLOR_G  30
#define COLOR_B  45
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CK_averageView

IMPLEMENT_DYNCREATE(CK_averageView, CView)

BEGIN_MESSAGE_MAP(CK_averageView, CView)
	//{{AFX_MSG_MAP(CK_averageView)
	ON_WM_LBUTTONDOWN()
	ON_WM_LBUTTONUP()
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CK_averageView construction/destruction

CK_averageView::CK_averageView()
{
	// TODO: add construction code here

}

CK_averageView::~CK_averageView()
{
}

BOOL CK_averageView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CK_averageView drawing

void CK_averageView::OnDraw(CDC* pDC)
{
	CK_averageDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDC->SetTextColor(RGB(120,0,200));
	pDC->TextOut(80,10,"你可以导入实验样本数据或者用鼠标单击设置样本数据,");
	pDC->TextOut(200,28,"具体请参考帮助文件!");
	int x1,y1,x2,y2;
	CBrush newbr,*oldbr;
	CPen  newp,*oldp;
//	newbr.CreateSolidBrush(RGB(150,150,0));
//	oldbr=pDC->SelectObject(&newbr);
	newp.CreatePen(PS_SOLID,1,RGB(150,150,0));
	oldp=pDC->SelectObject(&newp);
	for (int i=0;i<pDoc->vec_feature_point.size();i++)
	{

		y1=pDoc->vec_feature_point[i].y-5;
		y2=pDoc->vec_feature_point[i].y+5;
		x1=pDoc->vec_feature_point[i].x-5;
		x2=pDoc->vec_feature_point[i].x+5;
	
		pDC->Ellipse(x1,y1,x2,y2);
	}
	pDC->SelectObject(oldp);newp.DeleteObject();	
/*	pDC->SelectObject(oldbr);newbr.DeleteObject();*/
	
	newbr.CreateSolidBrush(RGB(155,125,50));
	oldbr=pDC->SelectObject(&newbr);
	newp.CreatePen(PS_SOLID,1,RGB(55,125,50));
	oldp=pDC->SelectObject(&newp);
	for (int j=0;j<pDoc->vec_point1.size();j++)
	{
		y1=pDoc->vec_point1[j].y-7;
		y2=pDoc->vec_point1[j].y+7;
		x1=pDoc->vec_point1[j].x-7;
		x2=pDoc->vec_point1[j].x+7;
		pDC->Ellipse(x1,y1,x2,y2);
	}
	pDC->SelectObject(oldp);newp.DeleteObject();	
	pDC->SelectObject(oldbr);newbr.DeleteObject();
	
	newbr.CreateSolidBrush(RGB(0,0,255));
	oldbr=pDC->SelectObject(&newbr);
	newp.CreatePen(PS_SOLID,1,RGB(0,0,255));
	oldp=pDC->SelectObject(&newp);
	for (int k=0;k<pDoc->vec_point2.size();k++)
	{
		y1=pDoc->vec_point2[k].y-5;
		y2=pDoc->vec_point2[k].y+5;
		x1=pDoc->vec_point2[k].x-5;
		x2=pDoc->vec_point2[k].x+5;
		pDC->Rectangle(x1,y1,x2,y2);
	}
	pDC->SelectObject(oldp);newp.DeleteObject();	
	pDC->SelectObject(oldbr);newbr.DeleteObject();

	newp.CreatePen(PS_SOLID,1,RGB(120,20,200));
	oldp=pDC->SelectObject(&newp);
	for (int m=0;m<pDoc->m_class_num;m++)
	{
		int m_r,m_g,m_b;
		m_r=105+m*COLOR_R;
		m_g=m*COLOR_G;
		m_b=5+m*COLOR_B;
		if (m_r>255) {m_r=255;}
		if (m_g>255) {m_g=255;}
		if (m_b>255) {m_b=255;}
		for (int n=0;n<pDoc->vec_point_class[m].size();n++)
		{
			if (m<=3) 
			{
				newbr.CreateSolidBrush(RGB(m_r,m_g+105,m_b+150));
				oldbr=pDC->SelectObject(&newbr);
				y1=pDoc->vec_point_class[m][n].y-5-2*m;
				y2=pDoc->vec_point_class[m][n].y+5+2*m;
				x1=pDoc->vec_point_class[m][n].x-5-2*m;
				x2=pDoc->vec_point_class[m][n].x+5+2*m;
				pDC->Rectangle(x1,y1,x2,y2);
				pDC->SelectObject(oldbr);newbr.DeleteObject();
			}
			if (6>=m&&m>3) 
			{	
				y1=pDoc->vec_point_class[m][n].y-3*(m-2);
				y2=pDoc->vec_point_class[m][n].y+3*(m-2);
				x1=pDoc->vec_point_class[m][n].x-3*(m-2);
				x2=pDoc->vec_point_class[m][n].x+3*(m-2);
				pDC->Ellipse(x1,y1,x2,y2);
			}

			if (m>6&&m<=9) 
			{
				newbr.CreateSolidBrush(RGB(m_r,m_g-100,m_b));
				oldbr=pDC->SelectObject(&newbr);
				y1=pDoc->vec_point_class[m][n].y-2*(m-4)-3;
				y2=pDoc->vec_point_class[m][n].y+2*(m-4)+3;
				x1=pDoc->vec_point_class[m][n].x-2*(m-4)-3;
				x2=pDoc->vec_point_class[m][n].x+2*(m-4)+3;
				pDC->Ellipse(x1,y1,x2,y2);
				pDC->SelectObject(oldbr);newbr.DeleteObject();
			}
			if (m>9&&m<=13) 
			{
				newbr.CreateSolidBrush(RGB(m_r-100,m_g-250,m_b-440));
				oldbr=pDC->SelectObject(&newbr);
				y1=pDoc->vec_point_class[m][n].y-2*(m-7)-3;
				y2=pDoc->vec_point_class[m][n].y+2*(m-7)+3;
				x1=pDoc->vec_point_class[m][n].x-2*(m-7)-3;
				x2=pDoc->vec_point_class[m][n].x+2*(m-7)+3;
				pDC->Ellipse(x1,y1,x2,y2);
				pDC->SelectObject(oldbr);newbr.DeleteObject();
			}
			if (m>13) 
			{
				y1=pDoc->vec_point_class[m][n].y-2*(m-12)-3;
				y2=pDoc->vec_point_class[m][n].y+2*(m-12)+3;
				x1=pDoc->vec_point_class[m][n].x-2*(m-12)-3;
				x2=pDoc->vec_point_class[m][n].x+2*(m-12)+3;
				pDC->Rectangle(x1,y1,x2,y2);
			}

		}	
	}
	pDC->SelectObject(oldp);newp.DeleteObject();
	// TODO: add draw code for native data here
}

/////////////////////////////////////////////////////////////////////////////
// CK_averageView printing

BOOL CK_averageView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CK_averageView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CK_averageView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CK_averageView diagnostics

#ifdef _DEBUG
void CK_averageView::AssertValid() const
{
	CView::AssertValid();
}

void CK_averageView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CK_averageDoc* CK_averageView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CK_averageDoc)));
	return (CK_averageDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CK_averageView message handlers

void CK_averageView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CK_averageDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	pDoc->vec_feature_point.push_back(point);

	CView::OnLButtonDown(nFlags, point);
}

void CK_averageView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	Invalidate(FALSE);
	CView::OnLButtonUp(nFlags, point);
}

⌨️ 快捷键说明

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