ClusterDlg.cpp
上传用户:goak128
上传日期:2013-07-17
资源大小:155k
文件大小:2k
源码类别:

控制台编程

开发平台:

C/C++

  1. // ClusterDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "Platform.h"
  5. #include "ClusterDlg.h"
  6. #include ".clusterdlg.h"
  7. // CClusterDlg 对话框
  8. IMPLEMENT_DYNAMIC(CClusterDlg, CDialog)
  9. CClusterDlg::CClusterDlg(CWnd* pParent /*=NULL*/)
  10. : CDialog(CClusterDlg::IDD, pParent)
  11. , m_nCodeNums(0)
  12. , m_nRawLen(0)
  13. , m_strCode(_T(""))
  14. {
  15. this->m_pRawData = NULL;
  16. }
  17. CClusterDlg::~CClusterDlg()
  18. {
  19. }
  20. void CClusterDlg::DoDataExchange(CDataExchange* pDX)
  21. {
  22. CDialog::DoDataExchange(pDX);
  23. DDX_Text(pDX, IDC_EDIT_CODELEN, m_nCodeNums);
  24. DDX_Text(pDX, IDC_STATIC_RAWLEN, m_nRawLen);
  25. DDX_Text(pDX, IDC_EDIT_CODE, m_strCode);
  26. }
  27. BEGIN_MESSAGE_MAP(CClusterDlg, CDialog)
  28. ON_BN_CLICKED(IDC_BTNCODE, OnBnClickedBtncode)
  29. END_MESSAGE_MAP()
  30. // 设定原始数据
  31. void CClusterDlg::LoadRawData(double* pRawData, UINT nRawLen)
  32. {
  33. this->m_pRawData = pRawData;
  34. this->m_nRawLen = nRawLen;
  35. this->m_strCode = "";
  36. }
  37. //////////////////////////////////////////////////////////////////////////
  38. // 计算码本
  39. void CClusterDlg::OnBnClickedBtncode()
  40. {
  41. // TODO: 在此添加控件通知处理程序代码
  42. double* pCodeBook = NULL;
  43. CString strFormat;
  44. CWnd::UpdateData(TRUE);
  45. if (this->m_pRawData != NULL)
  46. {
  47. // 码本长度是否合法
  48. if (this->m_nCodeNums <= 0)
  49. {
  50. AfxMessageBox("码本长度不能小于0");
  51. return;
  52. }
  53. pCodeBook = new double[this->m_nCodeNums];
  54. // 计算码本
  55. CVQ::KMeansCluster(this->m_pRawData, this->m_nRawLen, pCodeBook, this->m_nCodeNums);
  56. // 组合显示数据
  57. this->m_strCode = "";
  58. for (unsigned int i = 0; i < this->m_nCodeNums; i++)
  59. {
  60. strFormat.Format("%frn", pCodeBook[i]);
  61. this->m_strCode += strFormat;
  62. }
  63. CWnd::UpdateData(FALSE);
  64. delete[] pCodeBook;
  65. }
  66. }