- 652 名前:デフォルトの名無しさん mailto:sage [02/08/08 03:31]
- ヒルベルト走査関連
走査順に座標を求める #include<stdio.h> #include<stdlib.h> main(int w,char**v){size_t k,m=1<<atoi(v[1]),n=m*m,s,t,x,y,z;for(;n--;printf( "%d(%d,%d)\n",m*m+~n,x,y))for(x=y=0,t=n,s=54,k=m;k/=2;t%=k*k,x+=w&68?k:0,y+=w>4 ?0:k,s=--z&2?z&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s)for(w=64;t-(z=s /w%4)*k*k>=k*k;w/=4);} 座標から走査順を求める #include<stdio.h> #include<stdlib.h> main(int w,char**v){int k,m=1<<atoi(v[1]),s,t,x,y=m;for(;y--;puts(""))for(x=m;x --;printf("%02X ",t))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?4:0)+(x&k?2:0)))&3,t+=k* k*w,s=--w&2?w&1?(s&195)+(s&12)*4+(s/4&12):(s&60)+s/64+s%4*64:s);} ↑を利用しBITMAPCOREHEADERのBMPを出力 #include<stdio.h> #include<stdlib.h> FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1 ]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+26,8);O(26,4);O(12,4) ;O(m*65537,4);O(1572865,4);for(y=m;y--;)for(x=m;x--;O(t,3))for(t=0,s=54,k=m;k/= 2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=--w&2?w&1?(s&12)*4+(s&195)+(s/4&12) :s/64+(s&60)+s%4*64:s);} BITMAPINFOHEADERのBMPを出力 #include<stdio.h> #include<stdlib.h> FILE*f;O(a,b){for(;b--;a>>=8)putc(a,f);}main(int w,char**v){int k,m=1<<atoi(v[1 ]),s,t,x,y;f=fopen("hilbert.bmp","wb");O(19778,2);O(m*m*3+54,8);O(54,4);O(40,4) ;O(m,4);O(m,4);O(1572865,8);O(m*m*3,4);O(x=11812,4);O(x,12);for(y=m;y--;)for(x= m;x--;O(t,3))for(t=0,s=54,k=m;k/=2;w=(s>>((y&k?0:4)+(x&k?2:0)))&3,t+=k*k*w,s=-- w&2?w&1?(s&12)*4+(s&195)+(s/4&12):s/64+(s&60)+s%4*64:s);} BMP2種はMSPAINTとGIMPで表示を確認
|

|