Ignore:
Timestamp:
04/10/06 21:09:43 (19 years ago)
Author:
mattausch
Message:
 
File:
1 edited

Legend:

Unmodified
Added
Removed
  • GTP/trunk/Lib/Vis/shared/EvalStats/EvalStats.cpp

    r737 r744  
    88#include <iostream> 
    99#include <fstream> 
    10  
     10#include <math.h> 
     11#include <algorithm> 
    1112 
    1213using namespace std; 
     
    111112 
    112113 
     114inline bool vlt(const RenderStats &c1, const RenderStats &c2) 
     115{ 
     116        return c1.mRenderCost > c2.mRenderCost; 
     117} 
     118 
     119 
     120// evaluate number of view cells needed for same rendercost 
    113121void EvalNumViewCells(ofstream &outstream, 
    114122                                          const StatsContainer &firstStats,  
    115123                                          const StatsContainer &currentStats) 
    116                                           // vector<float> &ratios) 
    117124{ 
    118125         
     
    130137        for (it = currentStats.begin(); it != it_end; ++ it, ++ i) 
    131138        { 
    132                 //if (i > 200)  break; 
    133  
    134                 int j = 0; 
    135139                 
    136  
    137140                const float renderCost = (*it).mRenderCost; 
    138141     
     
    140143                // don't stop until cursor is placed one element behind 
    141144                // or end of vector is reached 
    142                 // note: use stl for this 
    143                 while ((j < n) && (renderCost <= firstStats[j].mRenderCost)) 
    144                 { 
    145                         //cout << "!!rendercost: " << renderCost << " " << firstStats[j].mRenderCost << endl; 
    146                         ++ j; 
    147                 } 
     145                StatsContainer::const_iterator equalCostIt = std::upper_bound(firstStats.begin(), firstStats.end(), *it, vlt); 
     146 
     147                int j = (int)(equalCostIt - firstStats.begin()); 
    148148 
    149149                float val; 
     
    154154                        val = (float)j; 
    155155                } 
    156                 else if (j == n) 
     156                else if (j >= n) 
    157157                { 
    158158                        val = (float)(j - 1); 
    159159                } 
    160                 else // interpolate linearly. NOTE: probably big error because of steep curve 
    161                 { 
     160                else  
     161                // interpolate linearly. NOTE: probably big error because of steep curve 
     162                // => intepolate logarithmically 
     163                { 
     164#if 1 
     165                        const float rcu = log(firstStats[j - 1].mRenderCost); 
     166                        const float rcl = log(firstStats[j].mRenderCost); 
     167                        const float rc = log(renderCost); 
     168#else 
    162169                        const float rcu = firstStats[j - 1].mRenderCost; 
    163170                        const float rcl = firstStats[j].mRenderCost; 
    164  
     171                        const float rc = renderCost; 
     172#endif 
    165173                        const float factor = (rcu - rcl != 0) ? 
    166                                 (rcu - renderCost) / (rcu - rcl) : 1; 
    167  
     174                                (rcu - rc) / (rcu - rcl) : 1; 
     175 
     176                        // view cells needed for same render cost 
    168177                        val = (float)j - 1 + factor; 
    169178                } 
     
    171180                // lower bound 
    172181                //int j = max (0, i - 1); 
    173                 cout << "i: " << i << " j: " << j << endl; 
     182                //cout << "i: " << i << " j: " << j << endl; 
    174183                float ratio = (i && val) ? (float)i / val : 1; 
    175184 
    176                 cout << "ratio: " << ratio << endl; 
     185                //cout << "ratio: " << ratio << endl; 
    177186                outstream << "#Pass\n" << i << endl; 
    178187                outstream << "#RenderCost\n" << renderCost << endl; 
    179188                outstream << "#ViewCellsRatio\n" << ratio << endl << endl;       
    180  
    181                 //cout << "#Pass " << i ++ << endl; 
    182                 //cout << "#RenderCost " << renderCost << endl; 
    183                 //cout << "#ViewCellsRatio " << ratio << endl;   
    184189        } 
    185190} 
     
    263268                for (int i = 0; i < n; ++ i) 
    264269                { 
    265                         cout << "rc: " << (*it)[i].mRenderCost << endl; 
     270                        //cout << "rc: " << (*it)[i].mRenderCost << endl; 
    266271                        ComputeStats(statsOut, firstStats[i], (*it)[i], i); 
    267272                } 
    268 #if 0 
    269                 const int vc = ComputeNoViewCells(firstStats, *it); 
    270                 cout << "need " << vc << " view cells to reach rendercost of method " << i << " with " << n << " view cells" << endl; 
    271 #endif 
     273 
     274                // evaluate number of view cells needed for same rendercost 
    272275                EvalNumViewCells(statsOut2, firstStats, (*it)); 
    273276 
Note: See TracChangeset for help on using the changeset viewer.