Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (import '(java.awt.event ActionEvent ActionListener ItemEvent ItemListener))
- (import '(java.awt Color Polygon Graphics Canvas
- GridLayout FlowLayout))
- (import java.util.Random)
- (import '(javax.swing JFrame JPanel JTextField JCheckBox JButton JLabel
- JComboBox))
- (def colors [java.awt.Color/blue
- java.awt.Color/cyan
- java.awt.Color/darkGray
- java.awt.Color/gray
- java.awt.Color/green
- java.awt.Color/lightGray
- java.awt.Color/magenta
- java.awt.Color/orange
- java.awt.Color/pink
- java.awt.Color/red
- java.awt.Color/white
- java.awt.Color/yellow])
- (defn setup-gui [mult]
- "Setup the GUI with the given multiple size")
- (defn triangle-coord [vec]
- "Convert a box vector to polygon coordinates"
- (let [[d x y S] vec]
- [[(+ x (/ S 2)), (+ y S)]
- [(+ x (/ S 4)), (+ y (/ S 2))]
- [(+ x (* 3 (/ S 4))) (+ y (/ S 2))]]))
- ; triangle-coord returns a nested vector representing the coordinates of a triangle,
- ; e.g. [[256 512] [128 256] [384 256]]
- (defn boxes-to-polygon [inv]
- "Convert polygon coordinates to Java array"
- (let [d (inv 0), [[x1 y1][x2 y2][x3 y3]] (triangle-coord inv), polygon (new java.awt.Polygon)]
- [(colors d) (doto polygon
- (.addPoint x1 y1)
- (.addPoint x2 y2)
- (.addPoint x3 y3))]))
- (defn find-boxes [d x y S]
- "Return vector collection of the triangle boxes of depth d, starting with x 0 0 512"
- (let [S2 (/ S 2), S4 (/ S 4), d1 (- d 1)]
- (if (= 1 d) [d x y S]
- (do (conj [[d x y S]]
- (find-boxes d1 (+ x S4) y S2)
- (find-boxes d1 x (+ y S2) S2)
- (find-boxes d1 (+ x S2) (+ y S2) S2))))))
- (find-boxes 5 0 0 512)
- (remove #(some vector? %)
- (tree-seq
- #(and (vector? %) (some vector? %))
- vec (find-boxes 5 0 0 512)))
- (defn de-nest-vector [v]
- (remove #(some vector? %) (tree-seq #(and (vector? %) (some vector? %)) vec v)))
- (defn get-polygons [d x y S]
- (map boxes-to-polygon (de-nest-vector (find-boxes d x y S))))
- ; (get-polygons 5 0 0 512)
- (defn get-canvas [S]
- (let [canvas (new java.awt.Canvas)]
- (doto canvas
- (.setSize S S)
- (.setBackground java.awt.Color/black))))
- (defn get-panel [canvas]
- (let [panel (new javax.swing.JPanel)]
- (doto panel
- (.add canvas))))
- (defn get-frame [panel]
- (let [frame (new javax.swing.JFrame)]
- (doto frame
- (.add panel)
- (.pack)
- (.setVisible true))))
- (defn get-usable-canvas [S]
- (let [canvas (get-canvas S)
- frame (get-frame (get-panel (get-canvas S)))]
- canvas))
- ; (de-nest-vector (find-boxes 5 0 0 512))
- ;(defn get-vertices [d x y S]
- ; (map triangle-coord (de-nest-vector (find-boxes d x y S))))
- ; (get-vertices 5 0 0 512)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement