/[libvob]/libvob/include/vob/vobs/Paper.hxx
ViewVC logotype

Diff of /libvob/include/vob/vobs/Paper.hxx

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.8 by tjl, Tue May 13 11:48:21 2003 UTC revision 1.9 by tjl, Wed May 14 22:03:30 2003 UTC
# Line 59  struct Verts { Line 59  struct Verts {
59      }      }
60    
61      int operator() (int i, int j, float fract = .5) {      int operator() (int i, int j, float fract = .5) {
62          DBG(dbg_paperquad) << "New vertex "<<i<<" "<<j<<" "<<fract<<"\n";          DBG(dbg_paperquad) << "New vertex "<<i<<" "<<j<<" "<<fract<<"\n"
63                << points[i].orig <<" "
64                << points[j].orig <<" "
65                << points[i].final <<" "
66                << points[j].final <<"\n"
67                ;
68          return append(          return append(
69                  lerp(points[i].orig, points[j].orig, fract) );                  lerp(points[i].orig, points[j].orig, fract) );
70      }      }
# Line 116  inline float split(Verts &v, float dicel Line 121  inline float split(Verts &v, float dicel
121      return ret;      return ret;
122  }  }
123    
 /** Whether the i-j stretch should be split again  
  * @return 1 = yes, 0 = no, -1 = j should be dropped  
  */  
 inline int split3(Verts &v, float dicelen1, float dicelen2, int i, int j, int k) {  
     Pt o1 = (Pt)v.points[i].final - (Pt)v.points[j].final;  
     Pt o2 = (Pt)v.points[j].final - (Pt)v.points[k].final;  
     float x1, x2;  
     if(fabs(o1.x) > fabs(o1.y)) {  
         x1 = o1.x; x2 = o2.x;  
     } else {  
         x1 = o1.y; x2 = o2.y;  
     }  
     Pt v1 = (Pt)v.points[i].final - (Pt)v.points[j].final;  
     Pt v2 = (Pt)v.points[j].final - (Pt)v.points[k].final;  
   
     float v1l = v1.length();  
     float v2l = v2.length();  
   
     if(v1l > dicelen1) return 1;  
   
     Pt v2_mapped = v2 * (x1 / x2);  
   
     float area = (v1 - v2_mapped).length();  
   
     float carea = area * v1l / (v1l + v2l);  
     DBG(dbg_paperquad) << "Split3 "<<i<<" "<<j<<" "<<  
             v.points[i].final<<" "<<v.points[j].final<<" "  
             << v.points[k].final<< " " <<area<<" "<<carea<<"\n";  
     if(area < dicelen2 / 2) return -1;  
     // The portion that is v1's worry  
     if(carea < dicelen2) return 0;  
     return 1;  
 }  
   
124  inline int splitTri(Verts &v, float dicelen1, float dicelen2, int i, int j, int k) {  inline int splitTri(Verts &v, float dicelen1, float dicelen2, int i, int j, int k) {
125      DBG(dbg_paperquad) << "SplitTri "<<i<<" "<<j<<" "<<      DBG(dbg_paperquad) << "SplitTri "<<i<<" "<<j<<" "<<k<<" "<<
126              v.points[i].final<<" "<<v.points[j].final<<" "              v.points[i].orig<<" "<<
127              << v.points[k].final<< "\n";              v.points[j].orig<<" "<<
128                v.points[k].orig<<" "<<
129                v.points[i].final<<" "<<
130                v.points[j].final<<" "<<
131                v.points[k].final<< "\n";
132      Pt ctr = 1/3. * (      Pt ctr = 1/3. * (
133                  v.points[i].orig +                  v.points[i].orig +
134                  v.points[j].orig +                  v.points[j].orig +

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.9

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26