Skip to content

Instantly share code, notes, and snippets.

@rm-hull
Last active July 5, 2016 19:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rm-hull/5732587 to your computer and use it in GitHub Desktop.
Save rm-hull/5732587 to your computer and use it in GitHub Desktop.
A Penrose tiling is a non-periodic tiling generated by an aperiodic set of prototiles. Penrose tilings are named after mathematician and physicist Roger Penrose who investigated these sets in the 1970s. This gist describes the tiling in terms of a rewriting grammar (an 'L-system') and renders using a turtle (https://github.com/rm-hull/turtle) on…
(ns lindenmayer-systems.demo
(:use [turtle.core :only [draw!]]
[turtle.renderer.vector :only [->svg]]
[turtle.renderer.canvas :only [->canvas]]
[enchilada :only [ctx canvas svg]]
[dommy.core :only [set-html! insert-after! replace! hide! show!]]
[jayq.core :only [show]])
(:use-macros [dommy.macros :only [sel1]]))
(def L '(:left 36))
(def R '(:right 36))
(def F '(:fwd 60))
(def P :save)
(def Q :restore)
(def penrose-tiling-seq
(letfn [(seq0 [a b c d e]
(lazy-seq
(cons
[P b Q R R P b Q R R P b Q R R P b Q R R P b Q]
(seq0
[c e R R d e L L L L b e P L c e L L L L a e Q R R]
[R c e L L d e P L L L a e L L b e Q R]
[L a e R R b e P R R R c e R R d e Q L]
[L L c e R R R R a e P R d e R R R R b e Q L L b e]
[]))))]
(seq0 [F] [F] [F] [F] [])))
;(show svg)
;
;(replace!
; (sel1 :svg#world)
; (draw! ->svg (nth penrose-tiling-seq 5) [800 600]))
(show canvas)
(draw!
(->canvas ctx)
(nth penrose-tiling-seq 5) [800 600])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment