📄 processcontrol.cpp
字号:
#include "StdAfx.h"
#include ".\processcontrol.h"
int allclassobjectmembers[MAXCLASSNUM][MAXOBJECTNUM];
int numofoneclass[MAXCLASSNUM];
double originfeaturematrix[OBJECTSNUMBER][FEATURELENGTH];
double kernelfeaturematrix[OBJECTSNUMBER][OBJECTSNUMBER];
int positiveobjects[OBJECTSNUMBER];
int negativeobjects[OBJECTSNUMBER];
int pandnobjects[OBJECTSNUMBER];
int pandnnum;
int positivenum,negativenum;
int round;
double ** trans;
double ** newfeaturematrix;
//////////////////////////////////////////////////////////////////////////
//全局性的变量都写在这里
//////////////////////////////////////////////////////////////////////////
CProcessControl::CProcessControl(void)
{
file0.open("result1.txt");
file1.open("result2.txt");
file2.open("result3.txt");
}
CProcessControl::~CProcessControl(void)
{
file0.close();
file1.close();
file2.close();
}
bool CProcessControl::readalllabelsfromfile(CString infilepath)
{
using namespace std;
ifstream listfile(infilepath);
string tempstr;
CString ctempstr;
int serial = 0;
int classnum = 0;
int postion = 0;
getline(listfile,tempstr);
while (getline(listfile,tempstr))
{
ctempstr = tempstr.c_str();
if (ctempstr.Find(" ") > 0)
{
numofoneclass[classnum] = postion;
classnum++;
postion = 0;
continue;
}
allclassobjectmembers[classnum][postion] = serial;
postion++;
serial++;
}
numofoneclass[classnum] = postion;
listfile.close();
//ofstream tempfile("test.txt");
//int i,j;
//int sum = 0;
//for (i=0;i<90;i++)
//{
// tempfile<<" begin"<<numofoneclass[i]<<endl;
// sum += numofoneclass[i];
// for (j=0;j<numofoneclass[i];j++)
// {
// tempfile<<allclassobjectmembers[i][j]<<endl;
// }
//}
//tempfile<<sum<<endl;
//tempfile.close();
return true;
}
bool CProcessControl::readallfeaturesfromfile(CString infilepath)
{
using namespace std;
ifstream listfile(infilepath);
string tempstr;
CString Ctempstr,tfeature;
int serial,pos,i;
for(serial=0;serial<OBJECTSNUMBER;serial++)
{
getline(listfile,tempstr);
Ctempstr = tempstr.c_str();
for (i = 0; i < FEATURELENGTH; i++)
{
pos = Ctempstr.Find(" ");
tfeature = Ctempstr.Left(pos);
originfeaturematrix[serial][i] = atof(tfeature);
Ctempstr.Delete(0,pos+1);
}
}
listfile.close();
// ofstream tempfile("test.txt");
//int j;
//for (i=0;i<OBJECTSNUMBER;i++)
//{
// for (j=0;j<300;j++)
// {
// tempfile<<originfeaturematrix[i][j]<<" ";
// }
// tempfile<<endl;
//}
return true;
}
bool CProcessControl::firstcomputedistance(int currentobject)
{
using namespace std;
int i,j;
double distancetemp;
for (i=0;i<OBJECTSNUMBER;i++)
{
distancetemp = 0;
for (j=0;j<FEATURELENGTH;j++)
{
distancetemp += (originfeaturematrix[i][j] - originfeaturematrix[currentobject][j])*(originfeaturematrix[i][j] - originfeaturematrix[currentobject][j]);
}
distancetrans[i] = distancetemp;
}
// ofstream tempfile("test.txt");
//for (i=0;i<OBJECTSNUMBER;i++)
//{
// tempfile<<distancetrans[i]<<endl;
//}
// tempfile.close();
return true;
}
bool CProcessControl::labelretrieval(int currentclass)
{
using namespace std;
int i,j;
int tempmin = 0;
double tempdistance;
for (i=0;i<RETURNBACKNUM;i++)
{
tempdistance = DOUBLEMAX;
for (j=0;j<OBJECTSNUMBER;j++)
{
//if (distancetrans[j] < 0)continue;
if (distancetrans[j] < tempdistance)
{
tempdistance = distancetrans[j];
tempmin = j;
}
}
distancetrans[tempmin] = DOUBLEMAX;
nearestobjects[i] = tempmin;
}
//ofstream tempfile("test.txt");
//for (i=0;i<RETURNBACKNUM;i++)
//{
// tempfile<<nearestobjects[i]<<endl;
//}
//tempfile.close();
pandnnum = 0;
positivenum = 0;
negativenum = 0;
for (i=0;i<RETURNBACKNUM;i++)
{
//判断是否被标注过
//for (j=0;j<pandnnum;j++)
//{
// if(pandnobjects[j] == nearestobjects[i])break;
//}
//if(j<pandnnum)continue;
//不判断标注了,直接学习,看看效果如何!!!!
//else
//{
// for (j=0;j<negativenum;j++)
// {
// if(negativeobjects[j] == nearestobjects[i])break;
// }
// if(j<negativenum)continue;
//}
for (j=0;j<numofoneclass[currentclass];j++)
{
if (allclassobjectmembers[currentclass][j] == nearestobjects[i])break;
}
if (j<numofoneclass[currentclass])
{
positiveobjects[positivenum] = nearestobjects[i];
//pandnobjects[pandnnum] = nearestobjects[i];
positivenum++;
//pandnnum++;
}
else
{
//pandnobjects[pandnnum] = nearestobjects[i];
negativeobjects[negativenum] = nearestobjects[i];
negativenum++;
//pandnnum++;
}
}
pandnnum = positivenum + negativenum;
for (i=0;i<positivenum;i++)
{
pandnobjects[i] = positiveobjects[i];
}
j=0;
for (;i<pandnnum;i++)
{
pandnobjects[i] = negativeobjects[j];
j++;
}
//ofstream tempfile("test.txt");
// for (i=0;i<pandnnum;i++)
// {
// tempfile<<pandnobjects[i]<<endl;
// }
//tempfile<<endl;
//for (i=0;i<positivenum;i++)
//{
// tempfile<<positiveobjects[i]<<endl;
//}
//tempfile<<endl;
//for (i=0;i<negativenum;i++)
//{
// tempfile<<negativeobjects[i]<<endl;
//}
return true;
}
bool CProcessControl::newcomputedistance(int currentobject)
{
using namespace std;
int i,j;
double distancetemp;
for (i=0;i<OBJECTSNUMBER;i++)
{
distancetemp = 0;
for (j=0;j<pandnnum;j++)
{
distancetemp += (newfeaturematrix[i][j] - newfeaturematrix[currentobject][j])*(newfeaturematrix[i][j] - newfeaturematrix[currentobject][j]);
}
distancetrans[i] = distancetemp;
if (round == 0)
{
file0<<distancetemp<<endl;
}
else if (round ==1)
{
file1<<distancetemp<<endl;
}
else if (round == 2)
{
file2<<distancetemp<<endl;
}
}
//using namespace std;
// ofstream tempfile("test.txt");
//for (i=0;i<OBJECTSNUMBER;i++)
//{
// tempfile<<distancetrans[i]<<endl;
//}
for (i=0;i<OBJECTSNUMBER;i++)
{
delete[] newfeaturematrix[i];
}
delete[] newfeaturematrix;
return true;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -