📄 mtpredicate.cpp
字号:
/*********************************************************************
* *
* Copyright (c) 1997,1998, 1999 *
* Multimedia DB Group and DEIS - CSITE-CNR, *
* University of Bologna, Bologna, ITALY. *
* *
* All Rights Reserved. *
* *
* Permission to use, copy, and distribute this software and its *
* documentation for NON-COMMERCIAL purposes and without fee is *
* hereby granted provided that this copyright notice appears in *
* all copies. *
* *
* THE AUTHORS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE *
* SUITABILITY OF THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING *
* BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. THE AUTHOR *
* SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE AS A *
* RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS *
* DERIVATIVES. *
* *
*********************************************************************/
#include "MT.h"
#include "MTpredicate.h"
#include "MTentry.h"
extern dist2sim hfunction;
extern double distr[1001];
double Dist2Sim(double dist) {
switch(hfunction) {
case LINEAR: return 1-dist/maxDist();
case EXPONENTIAL: return exp(-dist);
// case DISTR: return distr[(int)(dist*1001/maxDist())];
default: return 0;
}
}
double Sim2Dist(double sim) {
switch(hfunction) {
case LINEAR: return maxDist()*(1-sim);
case EXPONENTIAL: return -log(sim);
/* case DISTR: {
for(int i=0; distr[i]>=sim; i++);
return i*maxDist()/1001;
} */
default: return maxDist();
}
}
int
SimpleQuery::Consistent(const GiSTentry& entry)
{
assert(entry.IsA()==MTENTRY_CLASS);
// cout << "Evaluating " << entry;
if((grade==0)||(fabs(grade-((MTentry &)entry).Key()->distance)<=radius+((MTentry &)entry).maxradius())) { // prune for reference point
grade=pred->distance(((MTentry &)entry).object());
return(grade<=radius+((MTentry &)entry).maxradius());
}
else return FALSE;
}
int
SimpleQuery::NonConsistent(const GiSTentry& entry)
{
assert(entry.IsA()==MTENTRY_CLASS);
// cout << "Evaluating " << entry;
if((grade==0)||(fabs(grade-((MTentry &)entry).Key()->distance)>radius-((MTentry &)entry).maxradius())) { // prune for reference point
grade=pred->distance(((MTentry &)entry).object());
return(grade>radius-((MTentry &)entry).maxradius());
}
else return FALSE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -