首頁 > 易卦

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

作者:由 妄想扣籃的男人 發表于 易卦日期:2023-01-05

自由繪製貝塞爾曲線之後如何裁剪

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

用程式設計證明《完美級的貝塞爾曲線演算法》是正確的:講解在空間影片

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;