There already was one alt version which I found from the author's website about the entry; they used the version for development and it's unobfuscated. But two new ones were added. The most important feature is that it allows one to change the image size along with the anti-alias setting at compile time. This is gavare.alt.c. The second version (which also has the size/anti-alias changes) should theoretically work for Windows. This is gavare.alt2.c and running make alt will not try and compile it as most it'll fail on sane systems. Instead try make alt2. Both of these versions have some form of protection with the size/anti-alias setting and one does not have to define all three to get it to compile due to '#ifndef..#elif..#endif' in the code. The README.md file has been format/typo fixed.
47 lines
2.2 KiB
C
47 lines
2.2 KiB
C
#ifndef XX
|
|
#define XX 1024
|
|
#elif XX < 1
|
|
#undef XX
|
|
#define XX 1024
|
|
#endif
|
|
#ifndef YY
|
|
#define YY 768
|
|
#elif YY < 1
|
|
#undef YY
|
|
#define YY 768
|
|
#endif
|
|
#ifndef AA
|
|
#define AA 3
|
|
#elif AA < 1
|
|
#define AA 3
|
|
#endif
|
|
|
|
X=XX; Y=YY; A=AA;
|
|
|
|
J=0;K=-10;L=-7;M=1296;N=36;O=255;P=9;_=1<<15;E;S;C;D;F(b){E="1""111886:6:??AAF"
|
|
"FHHMMOO55557799@@>>>BBBGGIIKK"[b]-64;C="C@=::C@@==@=:C@=:C@=:C5""31/513/5131/"
|
|
"31/531/53"[b ]-64;S=b<22?9:0;D=2;}I(x,Y,X){Y?(X^=Y,X*X>x?(X^=Y):0, I (x,Y/2,X
|
|
)):(E=X); }H(x){I(x, _,0);}p;q( c,x,y,z,k,l,m,a, b){F(c
|
|
);x-=E*M ;y-=S*M ;z-=C*M ;b=x* x/M+ y*y/M+z
|
|
*z/M-D*D *M;a=-x *k/M -y*l/M-z *m/M; p=((b=a*a/M-
|
|
b)>=0?(I (b*M,_ ,0),b =E, a+(a>b ?-b:b)): -1.0);}Z;W;o
|
|
(c,x,y, z,k,l, m,a){Z=! c? -1:Z;c <44?(q(c,x ,y,z,k,
|
|
l,m,0,0 ),(p> 0&&c!= a&& (p<W ||Z<0) )?(W=
|
|
p,Z=c): 0,o(c+ 1, x,y,z, k,l, m,a)):0 ;}Q;T;
|
|
U;u;v;w ;n(e,f,g, h,i,j,d,a, b,V){o(0 ,e,f,g,h,i,j,a);d>0
|
|
&&Z>=0? (e+=h*W/M,f+=i*W/M,g+=j*W/M,F(Z),u=e-E*M,v=f-S*M,w=g-C*M,b=(-2*u-2*v+w)
|
|
/3,H(u*u+v*v+w*w),b/=D,b*=b,b*=200,b/=(M*M),V=Z,E!=0?(u=-u*M/E,v=-v*M/E,w=-w*M/
|
|
E):0,E=(h*u+i*v+j*w)/M,h-=u*E/(M/2),i-=v*E/(M/2),j-=w*E/(M/2),n(e,f,g,h,i,j,d-1
|
|
,Z,0,0),Q/=2,T/=2, U/=2,V=V<22?7: (V<30?1:(V<38?2:(V<44?4:(V==44?6:3))))
|
|
,Q+=V&1?b:0,T +=V&2?b :0,U+=V &4?b:0) :(d==P?(g+=2
|
|
,j=g>0?g/8:g/ 20):0,j >0?(U= j *j/M,Q =255- 250*U/M,T=255
|
|
-150*U/M,U=255 -100 *U/M):(U =j*j /M,U<M /5?(Q=255-210*U
|
|
/M,T=255-435*U /M,U=255 -720* U/M):(U -=M/5,Q=213-110*U
|
|
/M,T=168-113*U / M,U=111 -85*U/M) ),d!=P?(Q/=2,T/=2
|
|
,U/=2):0);Q=Q< 0?0: Q>O? O: Q;T=T<0? 0:T>O?O:T;U=U<0?0:
|
|
U>O?O:U;}R;G;B ;t(x,y ,a, b){n(M*J+M *40*(A*x +a)/X/A-M*20,M*K,M
|
|
*L-M*30*(A*y+b)/Y/A+M*15,0,M,0,P, -1,0,0);R+=Q ;G+=T;B +=U;++a<A?t(x,y,a,
|
|
b):(++b<A?t(x,y,0,b):0);}r(x,y){R=G=B=0;t(x,y,0,0);x<X?(printf("%c%c%c",R/A/A,G
|
|
/A/A,B/A/A),r(x+1,y)):0;}s(y){r(0,--y?s(y),y:y);}main(){printf("P6\n%i %i\n255"
|
|
"\n",X,Y);s(Y);}
|