📄 isodataview.cpp
字号:
// ISODATAView.cpp : implementation of the CISODATAView class
//
#include "stdafx.h"
#include "ISODATA.h"
#include "ISODATADoc.h"
#include "ISODATAView.h"
#include "ParaSetDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CISODATAView
IMPLEMENT_DYNCREATE(CISODATAView, CView)
BEGIN_MESSAGE_MAP(CISODATAView, CView)
//{{AFX_MSG_MAP(CISODATAView)
ON_WM_LBUTTONUP()
ON_COMMAND(ID_PARASET, OnParaset)
ON_COMMAND(ID_BEGINCLUSTER, OnBegincluster)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CISODATAView construction/destruction
CISODATAView::CISODATAView()
{
// TODO: add construction code here
c=5;//预期的类数
Nc=10;//初始聚类中心个数
Thn=8;//每一类中允许的最小模式数目
Ths=5;//类内各个分量分布的标准差上限
ThD=200;//两类中心之间的最小距离下限
L=2;//在每次迭代中可以合并的类的最多对数
I=20;//允许的最多迭代次数
k=0.5;//类分裂时用的系数k
PatNum=50;//设定模式的个数
PatDim=2;//设定模式的维数
pInput=NULL;
PatInStart=0;//是否可以开始数据输入
ClusCanBegin=0;//是否可以开始聚类
count=0;//鼠标输入数据的次数
// pDC=GetDC();
}
CISODATAView::~CISODATAView()
{
}
BOOL CISODATAView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CISODATAView drawing
void CISODATAView::OnDraw(CDC* pDC)
{
CISODATADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CISODATAView diagnostics
#ifdef _DEBUG
void CISODATAView::AssertValid() const
{
CView::AssertValid();
}
void CISODATAView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CISODATADoc* CISODATAView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CISODATADoc)));
return (CISODATADoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CISODATAView message handlers
void CISODATAView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(PatInStart==0||pInput==NULL)
return;
CDC *pDC;
pDC=GetDC();
if(PatInStart==1)
{
pInput[count]=(double)point.x;
pInput[count+1]=(double)point.y;
CString stringx,stringy,stringxy;
stringx.Format("%d",point.x);
stringy.Format("%d",point.y);
stringxy="("+stringx+","+stringy+")";
pDC->TextOut(point.x,point.y,stringxy);
count+=2;
if(count==PatNum*PatDim)
{
PatInStart=0;
MessageBox("输入结束");
ClusCanBegin=1;
return;
}
}
ReleaseDC(pDC);
CView::OnLButtonUp(nFlags, point);
}
void CISODATAView::OnParaset()
{
// TODO: Add your command handler code here
// MessageBox((CString)1199);
CParaSetDlg parasetdlg;
parasetdlg.m_c=c;//预期的类数
parasetdlg.m_Nc=Nc;//初始聚类中心个数
parasetdlg.m_Thn=Thn;//每一类中允许的最小模式数目
parasetdlg.m_Ths=Ths;//类内各个分量分布的标准差上限
parasetdlg.m_ThD=ThD;//两类中心之间的最小距离下限
parasetdlg.m_L=L;//在每次迭代中可以合并的类的最多对数
parasetdlg.m_I=I;//允许的最多迭代次数
parasetdlg.m_k=k;//类分裂时用的系数k
parasetdlg.m_PatNum=PatNum;//设定模式的个数
parasetdlg.m_PatDim=PatDim;//设定模式的维数
if(parasetdlg.DoModal()==IDOK)
{
isodata.c=parasetdlg.m_c;//预期的类数
isodata.Nc=parasetdlg.m_Nc;//初始聚类中心个数
isodata.Thn=parasetdlg.m_Thn;//每一类中允许的最小模式数目
isodata.Ths=parasetdlg.m_Ths;//类内各个分量分布的标准差上限
isodata.ThD=parasetdlg.m_ThD;//两类中心之间的最小距离下限
isodata.L=parasetdlg.m_L;//在每次迭代中可以合并的类的最多对数
isodata.I=parasetdlg.m_I;//允许的最多迭代次数
isodata.PatNum=parasetdlg.m_PatNum;//模式的个数
isodata.PatDim=parasetdlg.m_PatDim;//模式的维数
isodata.k=parasetdlg.m_k;//类分裂时用的系数k
c=parasetdlg.m_c;//预期的类数
Nc=parasetdlg.m_Nc;//初始聚类中心个数
Thn=parasetdlg.m_Thn;//每一类中允许的最小模式数目
Ths=parasetdlg.m_Ths;//类内各个分量分布的标准差上限
ThD=parasetdlg.m_ThD;//两类中心之间的最小距离下限
L=parasetdlg.m_L;//在每次迭代中可以合并的类的最多对数
I=parasetdlg.m_I;//允许的最多迭代次数
PatNum=parasetdlg.m_PatNum;//模式的个数
PatDim=parasetdlg.m_PatDim;//模式的维数
k=parasetdlg.m_k;//类分裂时用的系数k
}
// CString show;
// show.Format("%f",isodata.ThD);
MessageBox("可以开始用鼠标输入数据");
PatInStart=1;
if(pInput==NULL)
{
pInput=new double[PatNum*PatDim];
count=0;
}
else
{
delete []pInput;
pInput=new double[PatNum*PatDim];
count=0;
}
RedrawWindow();
}
void CISODATAView::OnBegincluster()
{
// TODO: Add your command handler code here
if(ClusCanBegin==0)
{
MessageBox("请继续输入数据!");
return;
}
RedrawWindow();
CDC *pDC;
pDC=GetDC();
isodata.PatternFromArray(pInput);
isodata.Process();
pCluster=isodata.pCluster;
double x,y;
int cluscount=1;
CString str;
CLUSTER_S *pTempc;
PATTERN_S *pTempp;
pTempc=pCluster;
pTempp=pTempc->pPat;
if(pTempc==NULL)
return;
do
{
pTempp=pTempc->pPat;
do
{
if(pTempp==NULL)
break;
x=pTempp->pat[0];
y=pTempp->pat[1];
str.Format("%d",cluscount);
pDC->TextOut((int)x,(int)y,str);
pTempp=pTempp->pNext;
}
while(pTempp!=NULL);
cluscount++;
pTempc=pTempc->pNext;
}
while(pTempc!=NULL);
ReleaseDC(pDC);
isodata.MemoryFree();
return ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -