📄 processcontrol.cpp
字号:
#include "StdAfx.h"
#include ".\processcontrol.h"
extern int allclassobjectmembers[MAXCLASSNUM][MAXOBJECTNUM];
extern int numofoneclass[MAXCLASSNUM];
extern double originfeaturesmatrix[OBJECTNUMBER][FEATHERLENTH];
extern double distancetrans[OBJECTNUMBER];
extern int positiveobjects[OBJECTNUMBER];
extern int negativeobjects[OBJECTNUMBER];
extern int pandnobjects[OBJECTNUMBER];
extern int pandnnum;
extern int positivenum;
extern int negativenum;
extern int round;
extern int nearestobjects[RETURNBACKNUM];
//extern double trans[MAXCLASSNUM][FEATHERLENTH];
extern double ** trans;
extern double * transcut;
extern double newfeaturesmatrix[OBJECTNUMBER][FEATHERLENTH];
//extern double ** newfeaturesmatrix;
CProcessControl::CProcessControl(void)
{
outfile1.open("result1.txt");
outfile2.open("result2.txt");
outfile3.open("result3.txt");
}
CProcessControl::~CProcessControl(void)
{
outfile1.close();
outfile2.close();
outfile3.close();
}
void 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();
}
void CProcessControl::readallfeaturesfromfile(CString infilepath)
{
using namespace std;
ifstream listfile(infilepath);
string tempstr;
CString Ctempstr,tfeature;
int serial,pos,i;
for(serial=0;serial<OBJECTNUMBER;serial++)
{
getline(listfile,tempstr);
Ctempstr = tempstr.c_str();
for (i = 0; i < FEATHERLENTH; i++)
{
pos = Ctempstr.Find(" ");
tfeature = Ctempstr.Left(pos);
originfeaturesmatrix[serial][i] = atof(tfeature);
Ctempstr.Delete(0,pos+1);
}
}
listfile.close();
}
void CProcessControl::firstcomputedistance(int currentobject)
{
using namespace std;
int i,j;
double distancetemp;
for (i=0;i<OBJECTNUMBER;i++)
{
distancetemp = 0;
for (j=0;j<FEATHERLENTH;j++)
{
distancetemp += (originfeaturesmatrix[i][j] - originfeaturesmatrix[currentobject][j])*(originfeaturesmatrix[i][j] - originfeaturesmatrix[currentobject][j]);
}
distancetrans[i] = distancetemp;
}
}
void CProcessControl::labelretrieval(int currentclass)
{
int i,j;
int tempmin;
double tempdistance;
for (i=0;i<RETURNBACKNUM;i++)
{
tempdistance = DOUBLEMAX;
for (j=0;j<OBJECTNUMBER;j++)
{
//if (distancetrans[j] < 0)continue;
if (distancetrans[j] < tempdistance)
{
tempdistance = distancetrans[j];
tempmin = j;
}
}
distancetrans[tempmin] = DOUBLEMAX;
nearestobjects[i] = tempmin;
}
for (i=0;i<RETURNBACKNUM;i++)
{
//判断是否被标注过
for (j=0;j<pandnnum;j++)
{
if(pandnobjects[j] == nearestobjects[i])break;
}
if(j<pandnnum)continue;
for (j=0;j<numofoneclass[currentclass];j++)
{
if (allclassobjectmembers[currentclass][j] == nearestobjects[i])break;
}
if (j<numofoneclass[currentclass])
{
positiveobjects[positivenum] = nearestobjects[i];
positivenum++;
}
else
{
negativeobjects[negativenum] = nearestobjects[i];
negativenum++;
}
}
pandnnum = positivenum + negativenum;
for (i=0;i<positivenum;i++)
{
pandnobjects[i] = positiveobjects[i];
}
j=0;
for (;i<pandnnum;i++)
{
pandnobjects[i] = negativeobjects[j];
j++;
}
}
void CProcessControl::computenewfeaturematrix(void)
{
int i,j,k;
double sumtemp;
for (i=0;i<OBJECTNUMBER;i++)
{
for (j=0;j<(int)(*transcut);j++)
{
sumtemp = 0;
for (k=0;k<FEATHERLENTH;k++)
{
sumtemp += trans[j][k]*originfeaturesmatrix[i][k];
}
newfeaturesmatrix[i][j] = sumtemp;
}
}
for (i=0;i<(int)(*transcut);i++)
{
delete[] trans[i];
}
delete[] trans;
}
void CProcessControl::newcomputedistance(int currentobject)
{
using namespace std;
int i,j;
double distance;
for (i=0;i<OBJECTNUMBER;i++)
{
distance = 0;
for (j=0;j<(int)(*transcut);j++)
{
distance += (newfeaturesmatrix[i][j] - newfeaturesmatrix[currentobject][j])*(newfeaturesmatrix[i][j] - newfeaturesmatrix[currentobject][j]);
}
distancetrans[i] = distance;
if (round == 0)
{
outfile1<<distance<<std::endl;
}
else if(round == 1)
{
outfile2<<distance<<std::endl;
}
else if(round == 2)
{
outfile3<<distance<<std::endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -