poly2d.hpp
Go to the documentation of this file.
00001 
00060 
00061 namespace Contour2D {
00062 
00063   struct spline2D {
00064     int v, x,y, bf;
00065     spline2D():v(0),x(0),y(0),bf(0) {}
00066   };
00067 
00069   spline2D g_Splines[9][256];
00070 
00071   int SplineMap[]={
00072                    4, 5,  6,
00073                    3, -1, 7,
00074                    2, 1,  0
00075   };
00076 
00077   void generateSpline2D() {
00078     int mapX[]={2,1,0, 0,0, 1, 2,2};
00079     int mapY[]={2,2,2, 1, 0,0,0, 1};
00080 
00081     for(int i=0; i<256; i++) {
00082       bool b[8];
00083       for(int j=0; j<8; j++)
00084         b[j]=i&(1<<j);
00085       spline2D s;
00086       if(!i) {
00087         g_Splines[8][i]=s;
00088         continue;
00089       }
00090       int a=-1;
00091       for(int j=3; j>=0; j--) {
00092         if(b[7-j]) {
00093           a=7-j;
00094           break;}
00095       }
00096       for(int j=0; a==-1&&j<4; j++) {
00097         if(b[j]) {
00098           a=j;
00099           break;}
00100       }
00101       for(int j=3; j>=0; j--) {
00102         if(b[(a+4+j+8)%8]) {
00103           s.v=0;
00104           s.x=mapX[(a+4+j+8)%8]-1;
00105           s.y=mapY[(a+4+j+8)%8]-1;
00106           s.bf=(a+j+8)%8;
00107           a=-1;
00108           break;
00109         }
00110       }
00111       for(int j=0; a!=-1&&j<4; j++) {
00112         if(b[(a+4-j+8)%8]) {
00113           s.v=0;
00114           s.x=mapX[(a+4-j+8)%8]-1;
00115           s.y=mapY[(a+4-j+8)%8]-1;
00116           s.bf=(a-j+8)%8;
00117           break;
00118         }
00119       }
00120       g_Splines[8][i]=s;
00121     }
00122 
00123     for(int a=0; a<8; a++) {
00124 
00125       for(int i=0; i<256; i++) {
00126         bool b[8];
00127         for(int j=0; j<8; j++)
00128           b[j]=i&(1<<j);
00129         spline2D s;
00130         if(!i) {
00131           g_Splines[a][i]=s;
00132           continue;
00133         }
00134         bool found=false;
00135         for(int j=3; j>=0; j--) {
00136           if(b[(a+4+j+8)%8]) {
00137             s.v=-j;
00138             s.x=mapX[(a+4+j+8)%8]-1;
00139             s.y=mapY[(a+4+j+8)%8]-1;
00140             s.bf=(a+j+8)%8;
00141             found=true;
00142             break;
00143           }
00144         }
00145         for(int j=0; !found&&j<4; j++) {
00146           if(b[(a+4-j+8)%8]) {
00147             s.v=j;
00148             s.x=mapX[(a+4-j+8)%8]-1;
00149             s.y=mapY[(a+4-j+8)%8]-1;
00150             s.bf=(a-j+8)%8;
00151             break;
00152           }
00153         }
00154         g_Splines[a][i]=s;
00155       }
00156     }
00157   }
00158 }


cob_3d_segmentation
Author(s): Georg Arbeiter
autogenerated on Wed Aug 26 2015 11:03:03