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

📄 antclustingview.cpp

📁 Clusting using aco with Visual C
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// AntClustingView.cpp : implementation of the CAntClustingView class
//

#include "stdafx.h"
#include "AntClusting.h"
#include "time.h"

#include "AntClustingDoc.h"
#include "AntClustingView.h"
#include "ArrayData.h"
#include "AntClusterAlogrithm.h"
#include "KmeansAlg.h"

#include "RDDlg.h"
#include "ParaDlg.h"
#include "InputCu.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

//extern DataObject dataObj[DATANUMBER];
extern CAntClusterAlogrithm alogrithm;
extern CArrayData *m_pAd;
extern DataObject *dataObj;


/////////////////////////////////////////////////////////////////////////////
// CAntClustingView

IMPLEMENT_DYNCREATE(CAntClustingView, CScrollView)

BEGIN_MESSAGE_MAP(CAntClustingView, CScrollView)
	//{{AFX_MSG_MAP(CAntClustingView)
	ON_COMMAND(ID_PARAMETER, OnParameter)
	ON_WM_LBUTTONDOWN()
	ON_WM_RBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_COMMAND(IDD_MENU_READDATA, OnMenuReaddata)
	ON_COMMAND(ID_CLOSE, OnClose)
	ON_COMMAND(ID_ORI_KMEANS, OnOriKmeans)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAntClustingView construction/destruction

CAntClustingView::CAntClustingView()
{
	// TODO: add construction code here
    m_nViewDataNum=1; 
	m_nViewPropNum=0;
    m_pOriDataObj=NULL;
    posChangeDataNum = 0;
	m_bStartDraw=false;
}

CAntClustingView::~CAntClustingView()
{
}

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

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CAntClustingView drawing



void CAntClustingView::OnDraw(CDC* pDC)
{   // TODO: add draw code for native data here


	if(m_bStartDraw)
	{
   

	int xLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSX);//GetDeviceCaps(LOGPIXELSX)和GetDeviceCaps(LOGPIXELSY)代表每逻辑英寸对应的水平像素点数
	int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
	
	CRect rect;
	GetClientRect(rect);

	pDC->SetMapMode(MM_ANISOTROPIC);
	pDC->SetWindowOrg(0,0);	
    pDC->SetWindowExt(alogrithm.m_nXSize*120,alogrithm.m_nYSize*120);	
	pDC->SetViewportExt(rect.right, rect.bottom);

	//pDC->SetViewportExt(xLogPixPerInch, yLogPixPerInch);
	
/*	pDC->SetViewportOrg(0,0);   当滚动视图时,windows自动调用onDraw函数重绘屏幕
	                             若此处加上这条语句,则重新把当前客户区的原点作为
								视口的原点,重绘图象会与原图象重迭难以辨认,所以不
								可以调动此函数,视口原点的设置由windows在初使化时
								设置一次即可,默认原点为(0,0)
*/
	
	// 取当前字体大小
	CFont *curFont = pDC->GetCurrentFont();
	LOGFONT curLogFont;
	LOGFONT newLogFont;
	curFont->GetLogFont( &curLogFont );
	long NewFontWidth = curLogFont.lfWidth;
	long NewFontHeight = curLogFont.lfHeight;
	newLogFont = curLogFont;

	//计算新的字体大小--缩小一倍
	newLogFont.lfWidth =(long)((float)NewFontWidth/50.0
		* ((float)xLogPixPerInch / 72.0));
	newLogFont.lfHeight =(long)((float)NewFontHeight/50.0
		* ((float)yLogPixPerInch / 72.0)); 	
	//创建并设置新的字体,保留以前的字体
	CFont newFont, *pnewFont;
	pnewFont=&newFont;
	
	CFont *oldFont;
	
	newFont.CreateFontIndirect(&newLogFont);
	oldFont = pDC->SelectObject(pnewFont);
		
///画出各类中元素
    CString ShowStr;
   int line=0;
   int linewide=300; 
	ShowStr.Format(_T("数据移动次数: %d"), posChangeDataNum);
	pDC->TextOut(0,line,ShowStr);
	line++; 
	ShowStr.Format(_T("类的总数: %d"), classNo);

	pDC->TextOut(0,line*linewide,ShowStr);
	line++;
	
	
  for(int m=0;m<=classNo;m++)
	 {   
		 CString sTemp;
	 	 sTemp.Format("classNo:  %d",m);
		 pDC->TextOut(0,line*linewide,sTemp);
		 line++;
		 int count = 0;
		 for(int n=0;n<m_nViewDataNum;n++)
		 {   
			 ShowStr.Empty();  
			 if((dataObj+n)->clusterNo==m)
			 {  
								
				 ShowStr.Format("dataPosition: %d        ",n);
				
                 sTemp.Format("%f       ",(dataObj+n)->x);
				 ShowStr+=sTemp;
			
				 sTemp.Format("%f       ",(dataObj+n)->y);
			     ShowStr+=sTemp;

				 for(int i=0;i<m_nViewPropNum;i++)
				 {sTemp.Format("%f        ",*((dataObj+n)->m_pfa+i));
				 ShowStr+=sTemp;}
				 
				 pDC->TextOut(0,line*linewide,ShowStr);
				line++;
				 count++;
			 }
		 }
		 
		 ShowStr.Format("此类中的数据个数:  %d",count);
		 pDC->TextOut(0,line*linewide,ShowStr);
		 	line++;
	 }
	
	   
	     line+=2;
		 ShowStr= "初始的数据分布:";
		 pDC->TextOut(0,line*linewide,ShowStr);
         line++;
	
		//////////////////////////////////////////
		//最后不要忘记将字体还原,这一句是必需的
		pnewFont=pDC->SelectObject(oldFont);
	
		int excursion=40;  
/////画框
	    pDC->Rectangle(excursion,line*linewide,alogrithm.m_nXSize*100+excursion,line*linewide+alogrithm.m_nYSize*100);

////画原始数据分布
	 
         CBrush redBrush(RGB(255,0,0));
/*	
		 CBrush greenBrush(RGB(0,255,0));
		 CBrush blueBrush(RGB(0,0,255));
		 CBrush* pOldBrush = pDC->SelectObject(&redBrush);
		 int r=18;
		 for(int i=0;i<150;i++)
		 {
			 pDC->Ellipse((int)(m_pOriDataObj+i)->x*100-r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide-r,
				 (int)(m_pOriDataObj+i)->x*100+r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide+r);
			 
		 }
		 pDC->SelectObject(&greenBrush);
		 for(i=50;i<100;i++)
		 {
			 pDC->Ellipse((int)(m_pOriDataObj+i)->x*100-r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide-r,
				 (int)(m_pOriDataObj+i)->x*100+r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide+r);
		 }
		 pDC->SelectObject(&blueBrush);
		 for(i=100;i<150;i++)
		 {
			 pDC->Ellipse((int)(m_pOriDataObj+i)->x*100-r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide-r,
				 (int)(m_pOriDataObj+i)->x*100+r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide+r);
		 }
		 
//	*/	
		 //////////////////////////////////////////
	
///*		
		int r=18;
    	CBrush* pOldBrush = pDC->SelectObject(&redBrush);
		for(int i=0;i<m_nViewDataNum;i++)
		{
			pDC->Ellipse((int)(m_pOriDataObj+i)->x*100-r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide-r,
				(int)(m_pOriDataObj+i)->x*100+r+excursion,(int)(m_pOriDataObj+i)->y*100+line*linewide+r);
			
		}

//	*/

		 //恢复画刷
		  pDC->SelectObject(pOldBrush);
///*   	 
 /* 
 line+=(alogrithm.m_nYSize*100)/linewide;
     	 ShowStr= "数据聚类结果:";
		 line++;
         oldFont= pDC->SelectObject(pnewFont );
		 pDC->TextOut(0,line*linewide,ShowStr);
         pnewFont=pDC->SelectObject(oldFont);
         line+=2;
		
		 /////画框
		 pDC->Rectangle(excursion,line*linewide,alogrithm.m_nXSize*100+excursion,line*linewide+alogrithm.m_nYSize*100);
		 
	     ///画聚类后数据分布

		 pDC->SelectObject(&redBrush);
		 for(i=0;i<50;i++)
		 {
			 pDC->Ellipse((int)(dataObj+i)->x*100-r+excursion,(int)(dataObj+i)->y*100+line*linewide-r,
				 (int)(dataObj+i)->x*100+r+excursion,(int)(dataObj+i)->y*100+line*linewide+r);
			 
		 }
		 pDC->SelectObject(&greenBrush);  
		 for(i=50;i<100;i++)
		 {
			 pDC->Ellipse((int)(dataObj+i)->x*100-r+excursion,(int)(dataObj+i)->y*100+line*linewide-r,
				 (int)(dataObj+i)->x*100+r+excursion,(int)(dataObj+i)->y*100+line*linewide+r);
		 }
		 pDC->SelectObject(&blueBrush);
		 for(i=100;i<150;i++)
		 {
			 pDC->Ellipse((int)(dataObj+i)->x*100-r+excursion,(int)(dataObj+i)->y*100+line*linewide-r,
				 (int)(dataObj+i)->x*100+r+excursion,(int)(dataObj+i)->y*100+line*linewide+r);
		 }
		 
		 pDC->SelectObject(pOldBrush);
		 
//*/
		 line+=(alogrithm.m_nYSize*100)/linewide;
		 ShowStr= "数据聚类结果的分类显示:";
		 line++;
         oldFont= pDC->SelectObject(pnewFont );

⌨️ 快捷键说明

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