Advertisement
Guest User

sierpinski in clojure

a guest
May 13th, 2012
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. (import '(java.awt.event ActionEvent ActionListener ItemEvent ItemListener))
  2. (import '(java.awt Color Polygon Graphics Canvas
  3.                    GridLayout FlowLayout))
  4. (import java.util.Random)
  5. (import '(javax.swing JFrame JPanel JTextField JCheckBox JButton JLabel
  6.                       JComboBox))
  7.  
  8. (def colors [java.awt.Color/blue
  9.              java.awt.Color/cyan
  10.              java.awt.Color/darkGray
  11.              java.awt.Color/gray
  12.              java.awt.Color/green
  13.              java.awt.Color/lightGray
  14.              java.awt.Color/magenta
  15.              java.awt.Color/orange
  16.              java.awt.Color/pink
  17.              java.awt.Color/red
  18.              java.awt.Color/white
  19.              java.awt.Color/yellow])
  20.  
  21. (defn setup-gui [mult]
  22.   "Setup the GUI with the given multiple size")
  23.  
  24. (defn triangle-coord [vec]
  25.   "Convert a box vector to polygon coordinates"
  26.   (let [[d x y S] vec]
  27.   [[(+ x (/ S 2)), (+ y S)]
  28.    [(+ x (/ S 4)), (+ y (/ S 2))]
  29.    [(+ x (* 3 (/ S 4))) (+ y (/ S 2))]]))
  30.  
  31. ; triangle-coord returns a nested vector representing the coordinates of a triangle,
  32. ; e.g. [[256 512] [128 256] [384 256]]
  33.  
  34. (defn boxes-to-polygon [inv]
  35.   "Convert polygon coordinates to Java array"
  36.   (let [d (inv 0), [[x1 y1][x2 y2][x3 y3]] (triangle-coord inv), polygon (new java.awt.Polygon)]
  37.     [(colors d) (doto polygon
  38.       (.addPoint x1 y1)
  39.        (.addPoint x2 y2)
  40.        (.addPoint x3 y3))]))
  41.  
  42.  
  43. (defn find-boxes [d x y S]
  44. "Return vector collection of the triangle boxes of depth d, starting with x 0 0 512"
  45.   (let [S2 (/ S 2), S4 (/ S 4), d1 (- d 1)]
  46.     (if (= 1 d) [d x y S]
  47.         (do  (conj [[d x y S]]
  48.                    (find-boxes d1 (+ x S4) y S2)
  49.                    (find-boxes d1 x (+ y S2) S2)
  50.                    (find-boxes d1 (+ x S2) (+ y S2) S2))))))
  51.  
  52.            
  53.  
  54. (find-boxes 5 0 0 512)
  55.  
  56. (remove #(some vector? %)
  57.         (tree-seq
  58.          #(and (vector? %) (some vector? %))
  59.          vec (find-boxes 5 0 0 512)))
  60.  
  61.  
  62. (defn de-nest-vector [v]
  63.   (remove #(some vector? %) (tree-seq #(and (vector? %) (some vector? %)) vec v)))
  64.  
  65. (defn get-polygons [d x y S]
  66.   (map boxes-to-polygon (de-nest-vector (find-boxes d x y S))))
  67.  
  68. ; (get-polygons 5 0 0 512)
  69.  
  70. (defn get-canvas [S]
  71.   (let [canvas (new java.awt.Canvas)]
  72.     (doto canvas
  73.       (.setSize S S)
  74.       (.setBackground java.awt.Color/black))))
  75.  
  76. (defn get-panel [canvas]
  77.   (let [panel (new javax.swing.JPanel)]
  78.     (doto panel
  79.       (.add canvas))))
  80.  
  81. (defn get-frame [panel]
  82.   (let [frame (new javax.swing.JFrame)]
  83.     (doto frame
  84.       (.add panel)
  85.       (.pack)
  86.       (.setVisible true))))
  87.  
  88. (defn get-usable-canvas [S]
  89.   (let [canvas (get-canvas S)
  90.         frame (get-frame (get-panel (get-canvas S)))]
  91.     canvas))
  92.    
  93. ; (de-nest-vector (find-boxes 5 0 0 512))
  94.  
  95. ;(defn get-vertices [d x y S]
  96. ; (map triangle-coord (de-nest-vector (find-boxes d x y S))))
  97.  
  98. ; (get-vertices 5 0 0 512)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement