www.pudn.com > GaitRsystem.rar > GaitDataBaseDlg.cpp


// GaitDataBaseDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "GaitRsystem.h" 
#include "GaitDataBaseDlg.h" 
 
#include "EigTrain.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// GaitDataBaseDlg dialog 
 
 
GaitDataBaseDlg::GaitDataBaseDlg(CWnd* pParent /*=NULL*/) 
	: CDialog(GaitDataBaseDlg::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(GaitDataBaseDlg) 
	m_name = _T(""); 
	m_dir1 = _T(""); 
	m_dir2 = _T(""); 
	m_dir3 = _T(""); 
	m_dir4 = _T(""); 
	m_dir5 = _T(""); 
	m_dir6 = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void GaitDataBaseDlg::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(GaitDataBaseDlg) 
	DDX_Text(pDX, IDC_EDIT1, m_name); 
	DDX_Text(pDX, IDC_EDIT2, m_dir1); 
	DDX_Text(pDX, IDC_EDIT3, m_dir2); 
	DDX_Text(pDX, IDC_EDIT4, m_dir3); 
	DDX_Text(pDX, IDC_EDIT5, m_dir4); 
	DDX_Text(pDX, IDC_EDIT6, m_dir5); 
	DDX_Text(pDX, IDC_EDIT7, m_dir6); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(GaitDataBaseDlg, CDialog) 
	//{{AFX_MSG_MAP(GaitDataBaseDlg) 
	ON_BN_CLICKED(IDC_EXIT, OnExit) 
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1) 
	ON_BN_CLICKED(IDC_BUTTON2, OnButton2) 
	ON_BN_CLICKED(IDC_BUTTON3, OnButton3) 
	ON_BN_CLICKED(IDC_BUTTON4, OnButton4) 
	ON_BN_CLICKED(IDC_BUTTON5, OnButton5) 
	ON_BN_CLICKED(IDC_BUTTON6, OnButton6) 
	ON_BN_CLICKED(IDC_GENERATEGAITDATABASE, OnGenerategaitdatabase) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// GaitDataBaseDlg message handlers 
 
void GaitDataBaseDlg::OnExit()  
{ 
	// TODO: Add your control notification handler code here 
	OnOK(); 
	 
} 
 
void GaitDataBaseDlg::OnButton1()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir1 = FilePath; 
	UpdateData(FALSE);	 
	 
} 
 
void GaitDataBaseDlg::OnButton2()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir2 = FilePath; 
	UpdateData(FALSE); 
	 
} 
 
void GaitDataBaseDlg::OnButton3()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir3 = FilePath; 
	UpdateData(FALSE); 
	 
} 
 
void GaitDataBaseDlg::OnButton4()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir4 = FilePath; 
	UpdateData(FALSE); 
	 
} 
 
void GaitDataBaseDlg::OnButton5()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir5 = FilePath; 
	UpdateData(FALSE); 
	 
} 
 
void GaitDataBaseDlg::OnButton6()  
{ 
	// TODO: Add your control notification handler code here 
	char filter[] = "pgm文件(*.pgm)|*.pgm|所有文件(*.*)|*.*|";	 
	CString FilePath; 
	CFileDialog Dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_EXPLORER , filter, NULL) ; 
	Dlg.DoModal(); 
	FilePath = Dlg.GetPathName(); 
	for(int i = FilePath.GetLength() - 1; i >0; i--) 
	{ 
		if(FilePath.GetAt(i) == '\\') 
			break;	 
		FilePath.Delete(i,1); 
	} 
	m_dir6 = FilePath; 
	UpdateData(FALSE); 
	 
} 
 
void GaitDataBaseDlg::OnGenerategaitdatabase()  
{ 
	// TODO: Add your control notification handler code here 
	UpdateData(TRUE); 
	char name[20]; 
 
	CString m_dir; 
	CString FilePath=m_dir1; 
	char fname[100]; 
	 
	//精度控制 
	double eps=0.000001; 
	//特征向量 
	double Eigv[LENGTH*LENGTH]; 
	//前25个特征值对应的特征向量 
	double DEigv[LENGTH*EigNum]; 
	//特征值 
	double eigenvalue[LENGTH]; 
	double *centroid; 
	centroid=new double[EigNum]; 
	double *TEigv; 
	TEigv=new double[EigNum*LENGTH]; 
	int index[LENGTH]; 
	 
	double data1[LENGTH*PGMNUM]; 
	double data2[LENGTH*PGMNUM]; 
	double data3[LENGTH*PGMNUM]; 
	double data4[LENGTH*PGMNUM]; 
	double data5[LENGTH*PGMNUM]; 
	double data6[LENGTH*PGMNUM]; 
	 
	//均值 
	double *m_Average; 
	m_Average=new double[LENGTH]; 
	double *m_Average1; 
	m_Average1=new double[LENGTH]; 
	double *m_Average2; 
	m_Average2=new double[LENGTH]; 
	double *m_Average3; 
	m_Average3=new double[LENGTH]; 
	double *m_Average4; 
	m_Average4=new double[LENGTH]; 
	double *m_Average5; 
	m_Average5=new double[LENGTH]; 
	double *m_Average6; 
	m_Average6=new double[LENGTH]; 
 
	//方差矩阵 
	double *m_FcMatrix; 
	m_FcMatrix=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix1; 
	m_FcMatrix1=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix2; 
	m_FcMatrix2=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix3; 
	m_FcMatrix3=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix4; 
	m_FcMatrix4=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix5; 
	m_FcMatrix5=new double[LENGTH*LENGTH]; 
	double *m_FcMatrix6; 
	m_FcMatrix6=new double[LENGTH*LENGTH]; 
 
	if(m_name.IsEmpty()) 
	{ 
		AfxMessageBox("Input name!",MB_ICONINFORMATION); 
	} 
	else if(m_dir1.IsEmpty()||m_dir2.IsEmpty()||m_dir3.IsEmpty()||m_dir4.IsEmpty()||m_dir5.IsEmpty()||m_dir6.IsEmpty()) 
	{ 
		AfxMessageBox("Input serial dir",MB_ICONINFORMATION); 
	} 
	else 
	{ 
		FILE *fp,*fp0; 
	    int i=0,j=0,n=0; 
	    int count=2; 
	    for(i = FilePath.GetLength() - 1; i >0; i--) 
		{ 
			if(FilePath.GetAt(i) == '\\') 
				count--; 
			if(count==0) 
				break; 
			FilePath.Delete(i,1); 
		} 
		m_dir=FilePath; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp=fopen(fname,"wb"); 
 
	    m_dir=m_dir1; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp0=fopen(fname,"rb"); 
	    fread(data1,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
	    fwrite(data1,1,sizeof(double)*LENGTH*PGMNUM,fp); 
	    fclose(fp0); 
	 
	    m_dir=m_dir2; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp0=fopen(fname,"rb"); 
	    fread(data2,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
	    fwrite(data2,1,sizeof(double)*LENGTH*PGMNUM,fp); 
	    fclose(fp0); 
 
	    m_dir=m_dir3; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp0=fopen(fname,"rb"); 
	    fread(data3,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
	    fwrite(data3,1,sizeof(double)*LENGTH*PGMNUM,fp); 
	    fclose(fp0); 
	 
	    m_dir=m_dir4; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp0=fopen(fname,"rb"); 
	    fread(data4,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
	    fwrite(data4,1,sizeof(double)*LENGTH*PGMNUM,fp); 
	    fclose(fp0); 
 
	    m_dir=m_dir5; 
	    strcpy(fname,m_dir); 
	    strcat(fname,"gaitdata.dat"); 
	    fp0=fopen(fname,"rb"); 
	    fread(data5,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
	    fwrite(data5,1,sizeof(double)*LENGTH*PGMNUM,fp); 
	    fclose(fp0); 
		 
		m_dir=m_dir6; 
		strcpy(fname,m_dir); 
		strcat(fname,"gaitdata.dat"); 
		fp0=fopen(fname,"rb"); 
		fread(data6,1,sizeof(double)*LENGTH*PGMNUM,fp0); 
		fwrite(data6,1,sizeof(double)*LENGTH*PGMNUM,fp); 
		fclose(fp0); 
		 
		fclose(fp); 
		 
		m_dir=FilePath; 
		strcpy(fname,m_dir); 
		strcat(fname,"name.txt"); 
		for(i=0;i