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