Guest User

Business Card Raytrace-modified

a guest
Sep 22nd, 2013
1,510
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. #include <stdlib.h> // card > aek.ppm
  2. #include <stdio.h>
  3. #include <math.h>
  4. #define u operator
  5. #define w return
  6. typedef int i;typedef float f;struct v{
  7. f x,y,z;v u+(v r){w v(x+r.x,y+r.y,z+
  8. r.z);}v u*(f r){w v(x*r,y*r,z*r);}f
  9. u%(v r){w x*r.x+y*r.y+z*r.z;}v(){}v
  10. u^(v r){w v(y*r.z-z*r.y,z*r.x-x*r.z,x
  11. *r.y-y*r.x);}v(f a,f b,f c){x=a;y=b;z=c
  12. ;}v u!(){w*this*(1/sqrt(*this%*this))
  13. ;}};i G[]={247570,280596,280600,249748,
  14. 18578,18577,231184,16,16};f R(){w
  15. (f)rand()/RAND_MAX;}i T(v o,v d,f &t,v
  16. &n){t=1e9;i m=0;f p=-o.z/d.z;if(.01<p)
  17. t=p,n=v(0,0,1),m=1;for(i k=19;k--;)for
  18. (i j=9;j--;)if(G[j]&1<<k){v p=o+v(-k,0
  19. ,-j-4);f b=p%d,c=p%p-1,q=b*b-c;if(q>0)
  20. {f s=-b-sqrt(q);if(s<t&&s>.01)t=s,n=!(
  21. p+d*t),m=2;}}w m;}v S(v o,v d){f t;v
  22. n;i m=T(o,d,t,n);if(!m)w v(.7,.6,1)*
  23. pow(1-d.z,4);v h=o+d*t,l=!(v(9+R(),9+
  24. R(),16)+h*-1),r=d+n*(n%d*-2);f b=l%n;
  25. if(b<0||T(h,l,t,n))b=0;f p=pow(l%r*(b>0
  26. ),99);if(m&1){h=h*.2;w((i)(ceil(h.x)+
  27. ceil(h.y))&1?v(3,1,1):v(3,3,3))*(b*.2+
  28. .1);}w v(p,p,p)+S(h,r)*.5;}i main(){
  29. printf("P6 512 512 255 ");v g=!v(-6,-16
  30. ,0),a=!(v(0,0,1)^g)*.002,b=!(g^a)*.002,
  31. c=(a+b)*-256+g;for(i y=512;y--;)for(i x
  32. =512;x--;){v p(13,13,13);for(i r=64;r--
  33. ;){v t=a*(R()-.5)*99+b*(R()-.5)*99;p=S(
  34. v(17,16,8)+t,!(t*-1+(a*(R()+x)+b*(y+R())
  35. +c)*16))*3.5+p;}printf("%c%c%c",(i)p.x,
  36. (i)p.y,(i)p.z);}}
Advertisement
Add Comment
Please, Sign In to add comment