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 }