hilbert.cs 891 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. %!CairoScript
  2. /hA { % cr dist lvl *hA* cr dist
  3. dup not { pop } {
  4. 1 sub
  5. 3 copy hB 0 exch L pop
  6. 3 copy hA 0 L pop
  7. 3 copy hA neg 0 exch L pop
  8. hC
  9. } ifelse
  10. } bind def
  11. /hB { % cr dist lvl *hB* cr dist
  12. dup not { pop } {
  13. 1 sub
  14. 3 copy hA 0 L pop
  15. 3 copy hB 0 exch L pop
  16. 3 copy hB neg 0 L pop
  17. hD
  18. } ifelse
  19. } bind def
  20. /hC { % cr dist lvl *hC* cr dist
  21. dup not { pop } {
  22. 1 sub
  23. 3 copy hD neg 0 L pop
  24. 3 copy hC neg 0 exch L pop
  25. 3 copy hC 0 L pop
  26. hA
  27. } ifelse
  28. } bind def
  29. /hD { % cr dist lvl *hD* cr dist
  30. dup not { pop } {
  31. 1 sub
  32. 3 copy hC neg 0 exch L pop
  33. 3 copy hD neg 0 L pop
  34. 3 copy hD 0 exch L pop
  35. hB
  36. } ifelse
  37. } bind def
  38. dict
  39. /width 1024 set
  40. /height 1024 set
  41. surface context
  42. 2 2 m 4 10 hA pop 1 g set-source stroke
  43. /target get (out.png) write-to-png pop
  44. pop