自由繪製貝塞爾曲線之後如何裁剪
const int sm=10;
struct prove{
char show_a[0x2000];
int show_n;
void show(int (*sa)[sm][sm][sm],int sn,int w,int x){
char*db=show_a;
int have=0;
for(int y=0;y { int have=0; for(int z=0;z have|=sa[w][x][y][z]; } if(have==0)continue; } { if(have==0){ have=1; }else{ db+=sprintf(db,“+”); } } for(int i=0;i db+=sprintf(db,“i*”); } db+=sprintf(db,“(”); { int have=0; for(int z=0;z if(sa[w][x][y][z]) { if(have==0){ have=1; }else{ db+=sprintf(db,“+”); } db+=sprintf(db,“%c*%i”,z+‘a’,sa[w][x][y][z]); } } } db+=sprintf(db,“)”); } *db=0; show_n=db-show_a; } prove(){ for(int sn=2;sn<=sm;sn++){ printf(“########################## sn=%i ######################\n”,sn); int dd[sm][sm][sm][sm]={};// w x y z // n for(int t=1;t // float i=t/n; //(a*1+b*0+c*0)+i*(a*-2+b*2+c*0)+i*i*(a*1+b*-2+c*1) //(a*1+b*0+c*0+d*0)+i*(a*-3+b*3+c*0+d*0)+i*i*(a*3+b*-6+c*3+d*0)+i*i*i*(a*-1+b*3+c*-3+d*1) // dd { /* a1 a2 a3 a4 b1 b2 b3 // b1=(a1+a2)/2 b2=(a2+a3)/2 b3=(a3+a4)/2 c1 c2 // c1=(b1+b2)/2 c2=(b2+b3)/2 d1 // d1=(c1+c2)/2 //////////////// */ // d1 c1 b1 a1 // c2 b2 a2 // b3 a3 // a4 int (*sa)[sm][sm][sm]=dd;// w x y z for(int x=0;x sa[0][x][0][sn-1-x]=1; } for(int w=1;w for(int x=0;x<(sn-w);x++){ int (&s1)[sm][sm]=sa[w-1][x]; int (&s2)[sm][sm]=sa[w-1][x+1]; int (&da)[sm][sm]=sa[w ][x]; //s1*2-s2 for(int y=0;y for(int z=0;z da[y][z]=s1[y][z]*2-s2[y][z]; } } } } printf(“___________dd_______________\n”); show(sa,sn,sn-1,0); int show_m=show_n; for(int w=0;w printf(“%2i: ”,w+1); for(int x=0;x<(sn-w);x++){ show(sa,sn,w,x); printf(“[%s] ”,show_a); } printf(“\n”); } } int ee[sm][sm][sm][sm]={};// w x y z for(int x=0;x for(int y=0;y for(int z=0;z ee[0][x][y][z]=dd[x][sn-1-x][y][z]; } } } int ff[sm][sm][sm][sm]={};// w x y z for(int x=0;x ff[0][x][0][x]=1; } int (*ga[])[sm][sm][sm]={ee,ff}; const char*name_a[]={“ee”,“ff”}; for(int gi=0;gi int (*sa)[sm][sm][sm]=ga[gi]; for(int w=1;w for(int x=0;x<(sn-w);x++){ int (&s1)[sm][sm]=sa[w-1][x]; int (&s2)[sm][sm]=sa[w-1][x+1]; int (&da)[sm][sm]=sa[w ][x]; //(s2-s1)*y+s1 // s2-s1 for(int y=0;y for(int z=0;z da[y][z]=s2[y][z]-s1[y][z]; } } // *y for(int y=sn-1;0 for(int z=0;z da[y][z]=da[y-1][z]; } } for(int z=0;z // +s1 for(int y=0;y for(int z=0;z da[y][z]+=s1[y][z]; } } } } printf(“___________%s_______________\n”,name_a[gi]); show(sa,sn,sn-1,0); int show_m=show_n; for(int w=0;w printf(“%2i: ”,w+1); for(int x=0;x<(sn-w);x++){ show(sa,sn,w,x); printf(“[%s] ”,show_a); } printf(“\n”); } } ///////// size for(int y=0;y for(int z=0;z ff[sn-1][0][y][z]<<=y; } } printf(“__________ ee==ff ___________ \n”); show(ee,sn,sn-1,0);printf(“ee=%s\n”,show_a); show(ff,sn,sn-1,0);printf(“ff=%s\n”,show_a); for(int y=0;y for(int z=0;z if(ee[sn-1][0][y][z] != ff[sn-1][0][y][z])exit(0); } } printf(“@@@@@@@@@@ ee==ff @@@@@@@@@@\n”,sn); } exit(0); } } prove;