Advertisement
Guest User

Untitled

a guest
Apr 5th, 2018
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.55 KB | None | 0 0
  1. #include <stdlib.h>   // card > aek.ppm
  2. #include <stdio.h>
  3. #include <math.h>
  4.  
  5. typedef int i;
  6.  
  7. typedef float f;
  8.  
  9. struct v{f x,y,z;
  10.     v operator+(v r)
  11.     {return v(x+r.x,y+r.y,z+r.z);}
  12.  
  13.     v operator*(f r)
  14.     {return v(x*r,y*r,z*r);}
  15.  
  16.     f operator%(v r)
  17.     {return x*r.x+y*r.y+z*r.z;}
  18.  
  19.     v(){}
  20.  
  21.     v operator^(v r)
  22.     {return v(y*r.z-z*r.y,z*r.x-x*r.z,x*r.y-y*r.x);}
  23.  
  24.     v(f a,f b,f c){x=a;y=b;z=c;}
  25.  
  26.     v operator!()
  27.     {return*this*(1/sqrt(*this%*this));}
  28. };
  29.  
  30. i G[]={247570,280596,280600,249748,18578,18577,231184,16,16};
  31.  
  32. f R(){return(f)rand()/RAND_MAX;}
  33.  
  34. i T(v o,v d,f&t,v&n){
  35.  
  36. t=1e9;
  37. i m=0;
  38.  
  39. f p=-o.z/d.z;
  40.  
  41. if(.01<p)
  42.     t=p,n=v(0,0,1),m=1;
  43.     for(i k=19;k--;)
  44.         for(i j=9;j--;)
  45.             if(G[j]&1<<k){
  46.                 v p=o+v(-k,0,-j-4);
  47.                 f b=p%d,c=p%p-1,q=b*b-c;
  48.                 if(q>0) {
  49.                     f s=-b-sqrt(q);
  50.                     if(s<t&&s>.01)
  51.                         t=s,n=!(p+d*t),m=2;
  52.                         }
  53.                         }
  54.                     return m;
  55. }
  56.  
  57. v S(v o,v d){
  58.     f t;
  59.     v n;
  60.     i m=T(o,d,t,n);
  61.     if(!m)
  62.         return v(.7,.6,1)*pow(1-d.z,4);
  63.         v h=o+d*t,l=!(v(9+R(),9+R(),16)+h*-1),r=d+n*(n%d*-2);
  64.         f b=l%n;
  65.         if(b<0||T(h,l,t,n))b=0;
  66.         f p=pow(l%r*(b>0),99);
  67.         if(m&1){
  68.             h=h*.2;return((i)(ceil(h.x)+ceil(h.y))&1?v(3,1,1):v(3,3,3))*(b*.2+.1);
  69.         }
  70.         return v(p,p,p)+S(h,r)*.5;
  71. }
  72.  
  73. i main(){
  74.     printf("P6 512 512 255 ");
  75.     v g=!v(-6,-16,0),a=!(v(0,0,1)^g)*.002,b=!(g^a)*.002,c=(a+b)*-256+g;
  76.     for(i y=512;y--;)
  77.         for(i x=512;x--;){
  78.             v p(13,13,13);
  79.             for(i r=64;r--;){
  80.                 v t=a*(R()-.5)*99+b*(R()-.5)*99;
  81.                 p=S(v(17,16,8)+t,!(t*-1+(a*(R()+x)+b*(y+R())+c)*16))*3.5+p;
  82.             }
  83.             printf("%c%c%c",(i)p.x,(i)p.y,(i)p.z);
  84.             }
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement