void Sculpture::interpolateColor(int x, int y, int z, double xPart, double yPart, double zPart, byte& r, byte& g, byte& b, byte& a) { getColor(x, y, z, r, g, b, a); x += 1 - doubleEqual(xPart, 0.0); y += 1 - doubleEqual(yPart, 0.0); z += 1 - doubleEqual(zPart, 0.0); byte r2,g2,b2,a2; getColor(x, y, z, r2, g2, b2, a2); r = (r + r2) / 2; g = (g + g2) / 2; b = (b + b2) / 2; a = (a + a2) / 2; }
double Power(double base, int exponent) { if(doubleEqual(base, 0) && exponent <= 0){ return -1.0; } if(exponent == 0){ return 1.0; } bool negative = false; if(exponent < 0){ negative = true; exponent = -exponent; } double res = 1.0*base; for(int i = 2; i <= exponent; i +=2){ res *= res; } if(exponent % 2 == 1){ res *= base; } if(negative == true){ return 1/res; } else{ return res; } }
int doubleCmp(double val1,double val2) { if (doubleEqual(val1,val2)) return 0; if (val1<val2) return 1; else return 2; }
bool Vertex::equals(Vertex * other){ bool isEqual=true; for (int i=0; i<3; i++){ if (!doubleEqual(arry[i], other->arry[i])){ isEqual=false; } } return isEqual; }
void fprintfReportLine(FILE *out,int instance, int f_res1_iter, int f_res2_iter, char *additional_col) { //print instance name, rlt,opt,anureet results //prints an error line if rlt bounds do no match bool rlt_bound_error = false; if(getF_res(1)->getIter(instance) >= 0) { if (!(doubleEqual(-getF_res(1)->getDoubleField(instance,0,F_RES_UBOUND), getSolutions()->getDoubleField(instance,SOLUTIONS_RLT)))) { // fprintf(out,". . . . . rlt != bound @iter0 = %.2f ",-getF_res(1)->getDoubleField(instance,0,F_RES_UBOUND)); rlt_bound_error = true; } } if(getF_res(2)->getIter(instance) >= 0) { if (!(doubleEqual(-getF_res(2)->getDoubleField(instance,0,F_RES_UBOUND), getSolutions()->getDoubleField(instance,SOLUTIONS_RLT)))) { // fprintf(out,"rlt != bound @iter0 = %.2f",-getF_res(1)->getDoubleField(instance,0,F_RES_UBOUND)); rlt_bound_error = true; } } // if (rlt_bound_error) fprintf(out,"\n"); fprintf(out,"%-13s %10.2f %10.2f | %5.2f %7.2f | " ,getSolutions()->getInstanceName(instance) ,getSolutions()->getDoubleField(instance,SOLUTIONS_RLT) ,getSolutions()->getDoubleField(instance,SOLUTIONS_OPT) ,getSolutions()->getDoubleField(instance,SOLUTIONS_V1GAP) ,getSolutions()->getDoubleField(instance,SOLUTIONS_V1TIME)); //print line from f_res1 if ((f_res1_iter >= 0) && (f_res1_iter < getF_res(1)->getIter(instance))) { fprintf(out,"%10.2f %5.2f" ,getF_res(1)->getDoubleField(instance,f_res1_iter,F_RES_UBOUND)*F_RES_MULTIPLIER ,getF_res(1)->boundClosedGap(instance,f_res1_iter)); if (getF_res(1)->getDoubleField(instance,f_res1_iter,F_RES_BESTHEUR) <= -COIN_DBL_MAX) fprintf(out,"\t%10s","N/A "); else fprintf(out,"\t%10.2f " ,getF_res(1)->getDoubleField(instance,f_res1_iter,F_RES_BESTHEUR)*F_RES_MULTIPLIER); fprintf(out,"%7.2f %5d %5d" ,getF_res(1)->getDoubleField(instance,f_res1_iter,F_RES_TIME) ,getF_res(1)->getIntField(instance,f_res1_iter,F_RES_ITER) ,getF_res(1)->getIntField(instance,f_res1_iter,F_RES_TOTCONS)); } else { fprintf(out,"%10s %5s %10s %7s %5s %5s" ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING); } fprintf(out," | "); //print line from f_res2 if ((f_res2_iter >= 0) && (f_res2_iter < getF_res(2)->getIter(instance))) { fprintf(out,"%10.2f %5.2f" ,getF_res(2)->getDoubleField(instance,f_res2_iter,F_RES_UBOUND)*F_RES_MULTIPLIER ,getF_res(2)->boundClosedGap(instance,f_res2_iter)); if (getF_res(2)->getDoubleField(instance,f_res2_iter,F_RES_BESTHEUR) <= -COIN_DBL_MAX) fprintf(out,"\t%10s","N/A "); else fprintf(out,"\t%10.2f " ,getF_res(2)->getDoubleField(instance,f_res2_iter,F_RES_BESTHEUR)*F_RES_MULTIPLIER); fprintf(out,"%7.2f %5d %5d" ,getF_res(2)->getDoubleField(instance,f_res2_iter,F_RES_TIME) ,getF_res(2)->getIntField(instance,f_res2_iter,F_RES_ITER) ,getF_res(2)->getIntField(instance,f_res2_iter,F_RES_TOTCONS)); } else { fprintf(out,"%10s %5s %10s %7s %5s" ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING ,TEST_NOT_RUN_STRING); } //print comparison column fprintf(out," | %3s\n",additional_col); }