- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
#/* */include<stdio.h>
/* */int/**/main(int/**/o,char**O){int y[4],
r[4] ,z[4],C,h,i,n,a,t,s,u[2][3][4]={{{6,9,0,3} ,
{ 1,10,4,7},{5,11,2,8}},{{3,0,6,9},{10,1,4,7},{ 8,2,5
,11}}}, M,I,R,A,K,U[2],RU[2],N[2],_=2;FILE*x[03] ; unsigned/*,
*/char/**/ p[2][3<<16],d[12],b[256][256];float/**/f,q [12];if((o<4)){
return!puts("<a.ppm>\40<b.ppm>\40<output.ppm>\40[odd]") ;}else{for(h=0;h<2;
h++){M=SEEK_SET;if(!(x[h]=fopen(O[h+1],"rb")))goto/**/e;if( (int)fread(*b,1,256,x[h
])<1||sscanf((char*)*b,*O="P6\n%d\40%d\n%d\n",&U[h],&N[h],&i)-3||i-255)goto/**/e;for(
i=C=RU[h]=0;i<256&&!RU[h];i++)if(b[0][i]=='\n')if(++C==3)fseek(x[h],RU[h]=i+1,M);if(!RU
[h]||U[h]<1||U[h]>(1<<16))goto/**/e;}if(*U-U[1]||*N-N[1])goto/**/s;for(h=0;h<256;h++)for(
i=0;i<256;b[h][i++]=0) ;for(i=0;i<*N;i++){for(h=0;h<2;h++)if(fread(p[h],3**U,01,x[h])!=1)
goto/**/e;for(h=0;h<3** U;h++)b[p[0][h]][p[1][h]]=1; }*y=*r=y[2]=r[2]=64;y[1]=r[1]=y[3]=r[
3]=192;A=(y[1]-*y)*(y[ 3]-y[2]);for(M=64;M>0; M/=2) {for(t=-1;t<=0;t++)if((*z=*r+t*M)>-1)
for(I=-1;I<1;I++)if((z [ 2]=r[2]+I*M)> (-1)) for (s=1;s>-1;s--)if((z[1]=r[1]+s*M)<257
)for(R=1;R>-1;R--)if( + 257>(z[3]=r [3]+R* M) )if((K=(z[1]-z[0])*(z[3]-z[2]))>A){
for(h=C=0;h<256&&C> -1 &&C<256; h ++)for (n=h*(z[1]-z[i=0])/256+*z;C>-1&&
i<256&&C<256;i++){a = i*(z[3]-z [2 ])/256+ z[2];if(b[h][i])C=(3*n-a)/2;}if
(C>-1&&C<256)for(C =0 , A= K ;C <4;++ C)y[C]=z[C];}for(C=0;C<4;C++)r
[C]=y[C];}if(!(x[2 ] =/* */ fopen (O[03],"wb+")))goto/**/e;else{
fprintf(x[2],*O,2* *U,2**N,+ 255);for(h= 0;h<(2);h++)fseek(x[h],RU[h],
SEEK_SET);C=(o<5)? 1/***/:00 ;/***/R=1+( 1<<16);for(i=0;i<*N;i++){for(h
=0;h<2;h++)if(fread (/****/p[ h/****/],+3 **U,1,x[h])!=1)goto/**/e;for(
M=0;M<7;M+=6)for(h =/**/0;* U/**/>h;h ++){for(n=0;n<3;n++){for(a=0;
a<2;a++)q[u[C][n] [a]]=p [a][h *3+n]*(r[a*2+1]-r[a*2])/256.f
+r[a*2];q[u[C][n] [2]]=q[u[C][n][3]]=(3*q[*u[C][
n]]-q[u[C][n][1]] )/2;}for(n=0;n<12;d[n++]=t<0?
0:(t>255?255:t)){ t = q[n];f=q[n]-t;_=(_*75)%R;if(_<f
*R)++ t;}fwrite(d +M,6,1, x[2]);}}}}for(h=0;h<3;h =h + 1
) t= fclose(x [h ]); return (t*1);s :
*O ="si" /* */ "ze "; printf (
* /*' P*/ O); ;e : return
! /*w*/ puts /*;
*/("error"); }