#include // usage: "card > asintes.ppm" #define f for // then read the ppm image #define p pow // need a C++11 compatible compiler typedef long l;typedef double d;void main(){l I[32]={201326592,1572864, 201326592,1048576,201326592,3145728,0,2101248,0,6144,786544,808458256, 2251751628,3698097789,2250309830,2227571811,2248245442,104991841,2248376515, 241372257,2249130051,1008667681,2183004259,2013463600,2182611043,1610810928, 3273130083,1610810928,3273182323,1665599024,3339701486,1061043824},i=0,x,y,m ,n,o;std::uniform_int_distributionF(-32,32),G(-4,4);std::random_device r; std::mt19937 R(r());d*S=new d[1056768],*A=S+8192,*B=A+524288,u,v,a,b,c,k,z,P =atan(1)*4;memset(S,0,1056768*sizeof(d));f(y=0;y<64;y++)f(x=0;x<128;x++){m=x -32;n=m%32;S[i++]=m>=0&&m<64&&y>=24&&y<40&&((I[(y-24)*2+(m<32?0:1)]&(1<>n);}f(v=0;v<512;v++)f(u=0;u<1024;u++){if(S[l(v+150*sin(u*P/1024)*(((512-v) *2/512)-1))/8*128+l(u+200*sin(v*P/512)*(((1024-u)*2/1024)-1))/8]){A[l(v*1024 +u)]+=40;a=(u-595)*4.13+512+F(R);b=(v-283)*4.13+256+F(R);k=1-(sqrt(p(u-512,2 )+p(v-256,2))/573);f(z=0;z<=1;z+=0.001){x=l((a-u)*z+u)+G(R);y=l((b-v)*z+v)+G (R);if(x>=0&&x<1024&&y>=0&&y<512){c=(1-z)*k;A[y*1024+x]+=p(c,1)+c;}}}}k=0;f( y=1;y<511;y++)f(x=1;x<1023;x++){v=0;f(n=-1;n<2;n++)f(m=-1;m<2;m++)v+=A[(y+m) *1024+x+n];o=y*1024+x;z=(v+A[o])/10;B[o]=z;if(z>k)k=z;}printf( "P3 1024 512 255 ");f(i=0;i<524288;i++){a=B[i]/k;b=1-p(1-a,2);c=1-p(1-(2*a>1 ?1:2*a),2);printf("%i %i %i ",l(a*255),l(b*255),l(c*255));}delete[]S;}