📄 antclustingview.cpp
字号:
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);
for(i=1;i<m_nViewDataNum;i++)
{ //绘点,每个簇内点取一种颜色
CBrush Brushx(RGB(255-(dataObj[i].clusterNo)*150%255,(dataObj[i].clusterNo)*50%255,255-(dataObj[i].clusterNo)*5%255));
pDC->SelectObject(&Brushx);
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);
Brushx.DeleteObject();
}
pDC->SelectObject(oldFont);
}
}
/////////////////////////////////////////////////////////////////////////////
// CAntClustingView printing
BOOL CAntClustingView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CAntClustingView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CAntClustingView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CAntClustingView diagnostics
#ifdef _DEBUG
void CAntClustingView::AssertValid() const
{
CScrollView::AssertValid();
}
void CAntClustingView::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CAntClustingDoc* CAntClustingView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CAntClustingDoc)));
return (CAntClustingDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CAntClustingView message handlers
void CAntClustingView::OnParameter()
{
// TODO: Add your command handler code here
CParaDlg paraDlg;
if(paraDlg.DoModal()==IDOK)
{
double alpha;
int antnum;
double pickk;
double dropk;
double r;
UINT maxcycnum;
float dist;
int SimilarityFun;
paraDlg.putpara(alpha,antnum,pickk,dropk,r,maxcycnum,dist,SimilarityFun); /////////////////将参数对话框传来的参数赋给主算法的相应参数
alogrithm.getpara(alpha,antnum,pickk,dropk,r,maxcycnum,dist,SimilarityFun);
alogrithm.InitDataObject();
m_nViewDataNum=m_pAd->GetDataNum();
m_nViewPropNum=m_pAd->GetPropNum();
m_bStartDraw=false;
m_pOriDataObj=new DataObject[m_nViewDataNum];
/////把初始值赋到数组中
for(int i=0;i<m_nViewDataNum;i++)
{
(m_pOriDataObj+i)->m_pfa=new double[m_nViewPropNum];
for(int j=0;j<m_nViewPropNum;j++ )
(double)*((m_pOriDataObj+i)->m_pfa+j)=(double)*((dataObj+i)->m_pfa+j) ;
(m_pOriDataObj+i)->x=(dataObj+i)->x;
(m_pOriDataObj+i)->y=(dataObj+i)->y;
}
posChangeDataNum=alogrithm.AntThreadProc(dataObj);
/* //////////多线程实现
CWinThread* antThread[30]; //蚂蚁线程数组
for(int j=0;j<alogrithm._antNumber;j++)
{
antThread[j] = AfxBeginThread(alogrithm.AntThreadProc, dataObj);
antThread[j]->m_bAutoDelete = false;
}
DWORD dwStatus[30];
bool isCheck = true;
while(isCheck)
{
int nCount = 0;
for(j=0;j<alogrithm._antNumber;j++)
{
VERIFY(::GetExitCodeThread(antThread[j]->m_hThread, &dwStatus[j]));
nCount += dwStatus[j];
}
if(nCount == 0)
isCheck = false;
}
//如果所有蚂蚁线程都已经结束,删除线程对象,对数据分类
for(j=0;j<alogrithm._antNumber;j++)
{
delete antThread[j];
}
*/
/////////////////////////////
CString Origin_Str="", Change_Str="";
CString Origin_temp="",Change_temp="";
/* for( i=0;i<DATANUMBER;i++)
{ Origin_Str.Empty();
Origin_Str="\n";
Origin_temp.Format("%f",m_pOriDataObj[i].property1);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
Origin_temp.Format("%f",m_pOriDataObj[i].property2);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
Origin_temp.Format("%f",m_pOriDataObj[i].property3);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
Origin_temp.Format("%f",m_pOriDataObj[i].property4);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
Origin_temp.Format("%f",m_pOriDataObj[i].x);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
Origin_temp.Format("%f",m_pOriDataObj[i].y);
Origin_Str+=Origin_temp;
Origin_Str+=" ";
// WriteLog(Origin_Str);
Change_Str.Empty();
Change_Str="\n";
Change_temp.Format("%f",dataObj[i].property1);
Change_Str+=Change_temp;
Change_Str+=" ";
Change_temp.Format("%f",dataObj[i].property2);
Change_Str+=Change_temp;
Change_Str+=" ";
Change_temp.Format("%f",dataObj[i].property3);
Change_Str+=Change_temp;
Change_Str+=" ";
Change_temp.Format("%f",dataObj[i].property4);
Change_Str+=Change_temp;
Change_Str+=" ";
Change_temp.Format("%f",dataObj[i].x);
Change_Str+=Change_temp;
Change_Str+=" ";
Change_temp.Format("%f",dataObj[i].y);
Change_Str+=Change_temp;
Change_Str+=" ";
// WriteLog(Change_Str) ;
}
*/
classNo=alogrithm.ClassifyData();
m_bStartDraw=true;
Invalidate();
}
}
/*void CAntClustingView::OnClose()
{
// TODO: Add your command handler code here
}
*/
void CAntClustingView::OnInitialUpdate() ////设置屏幕大小
{
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx =600;
sizeTotal.cy =18000;
SetScrollSizes(MM_TEXT, sizeTotal);
CScrollView::OnInitialUpdate();
}
void CAntClustingView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
/* CClientDC dc(this);
OnPrepareDC(&dc);
dc.DPtoLP(&point);*/
CScrollView::OnLButtonDown(nFlags, point);
}
void CAntClustingView::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
OnPrepareDC(&dc);
/* dc.DPtoLP(&point);*/
CScrollView::OnRButtonDown(nFlags, point);
}
void CAntClustingView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
OnPrepareDC(&dc);
/* dc.DPtoLP(&point);*/
CScrollView::OnMouseMove(nFlags, point);
}
void CAntClustingView::OnMenuReaddata()
{
// TODO: Add your command handler code here
CRDDlg myReadDlg;
myReadDlg.DoModal();
}
void CAntClustingView::OnOriKmeans()
{
int k; //k为预定义的类的数目
CKmeansAlg kmeans;
// DataObject *AVG;
DataObject *AVG;
HGLOBAL hData;
CInputCu Inc;
if(Inc.DoModal()==IDOK)
{
k=Inc.m_CuNumber;
m_nViewDataNum=m_pAd->GetDataNum();
if(m_nViewDataNum>0){
hData=GlobalAlloc(GMEM_MOVEABLE,k*sizeof(DataObject));
AVG=(DataObject*)GlobalLock(hData); ////AVG[]用于存放k个初始聚类中心
dataObj=kmeans.WarSelect(dataObj,AVG,k,m_nViewDataNum,Inc.m_algorithm);
// AVG=GetAVG(AVG);}
}
m_bStartDraw=true;
}
Invalidate();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -