(ns font (:require [quil.core :as quil])) (def char-placeholder [[[0.0 0.0] [1.0 0.0] [1.0 1.0] [0.0 1.0] [0.0 0.0]]]) (def char-layouts {"A" [[[0.0 1.0] [0.4 0.0] [0.6 0.0] [1.0 1.0]] [[0.875 0.75] [0.125 0.75]]] "B" [[[0.0 1.0] [0.0 0.0] [0.8 0.0] [1.0 0.1] [1.0 0.4] [0.8 0.5] [0.0 0.5] [0.8 0.5] [1.0 0.6] [1.0 0.9] [0.8 1.0] [0.0 1.0]]] "c" [[[1.0 0.0] [0.35 0.0] [0.0 0.4] [0.0 0.6] [0.35 1.0] [1.0 1.0]] [[0.6 -0.1] [0.8 -0.25]]] "C" [[[1.0 0.0] [0.35 0.0] [0.0 0.4] [0.0 0.6] [0.35 1.0] [1.0 1.0]]] "D" [[[0.0 0.0] [0.7 0.0] [1.0 0.4] [1.0 0.6] [0.7 1.0] [0.0 1.0]] [[0.0 1.0] [0.0 0.0]]] "E" [[[1.0 0.0] [0.0 0.0] [0.0 1.0] [1.0 1.0]] [[0.0 0.5] [0.5 0.5]]] "F" [[[1.0 0.0] [0.0 0.0] [0.0 1.0]] [[0.0 0.35] [0.7 0.35]]] "G" [[; [1.0 0.0] ; [0.7 0.0] ; [0.0 0.0] [0.7 0.0] [0.0 0.3] [0.0 0.9] [0.1 1.0] [0.9 1.0] [1.0 0.9] [1.0 0.5] [0.5 0.7]]] "H" [[[0.0 0.0] [0.0 1.0]] [[0.0 0.5] [1.0 0.5]] [[1.0 0.0] [1.0 1.0]]] "I" [[[0.0 0.0] [1.0 0.0]] [[0.5 0.0] [0.5 1.0]] [[0.0 1.0] [1.0 1.0]]] "J" [[[0.9 0.0] [0.9 0.9] [0.8 1.0] [0.2 1.0] [0.1 0.9] [0.1 0.6]]] "K" [[[0.0 0.0] [0.0 1.0]] [[1.0 1.0] [0.0 0.4] [0.0 0.3] [0.7 0.0]]] "L" [[[0.0 0.0] [0.0 1.0] [1.0 1.0]]] "M" [[[0.0 1.0] [0.0 0.0] [0.1 0.0] [0.5 0.3] [0.9 0.0] [1.0 0.0] [1.0 1.0]]] "N" [[[0.0 1.0] [0.0 0.0] [0.1 0.0] [0.9 1.0] [1.0 1.0] [1.0 0.0]]] "O" [[[0.1 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.9] [0.9 1.0] [0.1 1.0] [0.0 0.9] [0.0 0.1] [0.1 0.0]]] "P" [[[0.0 1.0] [0.0 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.3] [0.9 0.4] [0.0 0.4]]] "Q" [[[0.0 1.0] ; [0.0 0.4] [0.0 0.1] [0.1 0.0] [0.9 0.0] [1.0 0.0] [1.0 0.6] [0.1 1.0] [0.0 1.0]] [[0.5 0.6] [0.75 1.0] [1.0 1.0]]] "R" [[[0.0 1.0] [0.0 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.3] [0.9 0.4] [0.0 0.4]] [[0.3 0.4] [1.0 1.0]]] "S" [[[0.0 0.7] [0.0 0.9] [0.1 1.0] [0.9 1.0] [1.0 0.9] [1.0 0.6] [0.0 0.3] [0.0 0.1] [0.1 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.2] ]] "T" [[ [0.0 0.0] [1.0 0.0] ] [[0.5 0.0] [0.5 1.0]]] "U" [[[0.0 0.0] [0.0 0.9] [0.1 1.0] [0.9 1.0] [1.0 0.9] [1.0 0.0]]] "V" [[[0.0 0.0] [0.4 1.0] [0.6 1.0] [1.0 0.0]]] "W" [[[0.0 0.0] [0.0 1.0] [0.1 1.0] [0.5 0.5] [0.9 1.0] [1.0 1.0] [1.0 0.0]]] "X" [[[0.0 0.0] [1.0 1.0]] [[0.0 1.0] [1.0 0.0]]] "Y" [[[0.0 0.0] [0.5 0.5] [0.5 1.0] [0.5 1.0] [0.5 0.5] [1.0 0.0]]] "Z" [[[0.0 0.0] [1.0 0.0] [0.0 1.0] [1.0 1.0]] [[0.2 0.5] [0.8 0.5]]] "0" [[[0.1 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.9] [0.9 1.0] [0.1 1.0] [0.0 0.9] [0.0 0.1] [0.1 0.0]] [[1.0 0.3] [0.0 0.7]]] "1" [[[0.0 0.2] [0.5 0.0] [0.5 1.0]] [[0.0 1.0] [1.0 1.0] [1.0 0.8]]] "2" [[[0.0 0.1] [0.1 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.4] [0.0 0.8] [0.0 1.0] [1.0 1.0]]] "3" [[[0.0 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.4] [0.9 0.5] [0.2 0.5] [0.9 0.5] [1.0 0.6] [1.0 0.9] [0.9 1.0] [0.0 1.0]]] "4" [[[0.1 0.0] [0.1 0.6] [1.0 0.6]] [[0.9 0.1] [0.9 1.0]]] "5" [[[1.0 0.0] [0.1 0.0] [0.1 0.5] [0.9 0.5] [1.0 0.6] [1.0 0.9] [0.9 1.0] [0.2 1.0] [0.0 0.8]]] "6" [[[0.7 0.0] [0.0 0.3] [0.0 0.9] [0.1 1.0] [0.9 1.0] [1.0 0.9] [1.0 0.7] [0.9 0.6] [0.0 0.6]]] "7" [[[0.0 0.0] [1.0 0.0] [0.3 1.0]] [[0.3 0.5] [0.9 0.5]]] "8" [[[0.2 0.0] [0.8 0.0] [0.9 0.1] [0.9 0.4] [0.9 0.4] [1.0 0.5] [1.0 0.9] [0.9 1.0] [0.1 1.0] [0.0 0.9] [0.0 0.5] [0.1 0.4] [0.1 0.4] [0.1 0.1] [0.2 0.0]] [[0.1 0.4] [0.9 0.4]]] "9" [[[1.0 0.4] [0.1 0.4] [0.0 0.3] [0.0 0.1] [0.1 0.0] [0.9 0.0] [1.0 0.1] [1.0 0.0] [1.0 0.4] [0.6 1.0]]] "." [[[0.4 0.9] [0.6 0.9] [0.6 1.0] [0.4 1.0] [0.4 0.9]]] "," [[[0.6 0.7] [0.6 0.9] [0.5 1.0]]] ";" [[[0.4 0.3] [0.6 0.3] [0.6 0.4] [0.4 0.4] [0.4 0.3]] [[0.4 0.6] [0.6 0.6] [0.6 0.9] [0.5 1.0]]] ":" [[[0.4 0.3] [0.6 0.3] [0.6 0.4] [0.4 0.4] [0.4 0.3]] [[0.4 0.6] [0.6 0.6] [0.6 0.7] [0.4 0.7] [0.4 0.6]]] "'" [[[0.5 0.0] [0.5 0.3]]] "\"" [[[0.3 0.0] [0.3 0.3]] [[0.7 0.3] [0.7 0.0]]] "<" [[[0.9 0.2] [0.1 0.5] [0.9 0.8]]] ">" [[[0.1 0.2] [0.9 0.5] [0.1 0.8]]] "[" [[[0.8 0.0] [0.3 0.0] [0.3 1.0] [0.8 1.0]]] "]" [[[0.2 0.0] [0.7 0.0] [0.7 1.0] [0.2 1.0]]] "{" [[[0.8 0.0] [0.6 0.0] [0.5 0.1] [0.5 0.4] [0.4 0.5] [0.0 0.5] [0.4 0.5] [0.5 0.6] [0.5 0.9] [0.6 1.0] [0.8 1.0]]] "}" [[[0.2 0.0] [0.4 0.0] [0.5 0.1] [0.5 0.4] [0.6 0.5] [1.0 0.5] [0.6 0.5] [0.5 0.6] [0.5 0.9] [0.4 1.0] [0.2 1.0]]] "(" [[[0.7 0.0] [0.3 0.3] [0.3 0.7] [0.7 1.0]]] ")" [[[0.3 0.0] [0.7 0.3] [0.7 0.7] [0.3 1.0]]] "/" [[[0.9 0.1] [0.1 0.9]]] "|" [[[0.5 0.0] [0.5 1.0]]] "\\" [[[0.1 0.1] [0.9 0.9]]] "?" [[[0.1 0.2] [0.4 0.0] [0.8 0.0] [1.0 0.2] [1.0 0.3] [0.5 0.6] [0.5 0.7]] [[0.4 0.9] [0.6 0.9] [0.6 1.0] [0.4 1.0] [0.4 0.9]]] "`" [[[0.3 0.0] [0.7 0.2]]] "~" [[[0.0 0.5] [0.2 0.4] [0.3 0.4] [0.7 0.6] [0.8 0.6] [1.0 0.5]]] "!" [[[0.5 0.0] [0.5 0.7]] [[0.4 0.9] [0.6 0.9] [0.6 1.0] [0.4 1.0] [0.4 0.9]]] "@" [[[0.0 0.2] [0.1 0.1] [0.9 0.1] [1.0 0.2] [1.0 0.8] [0.9 0.9] [0.8 0.9] [0.7 0.8] [0.6 0.7] [0.6 0.4] [0.1 0.4] [0.0 0.5] [0.0 0.8] [0.1 0.9] [0.4 0.9] [0.6 0.7]]] "#" [[[0.4 0.1] [0.1 0.9]] [[0.9 0.1] [0.6 0.9]] [[0.1 0.3] [1.0 0.3]] [[0.0 0.7] [0.9 0.7]]] "$" [[[0.5 0.0] [0.5 1.0]] [[0.9 0.3] [0.8 0.2] [0.2 0.2] [0.1 0.3] [0.1 0.4] [0.2 0.5] [0.8 0.5] [0.9 0.6] [0.9 0.7] [0.8 0.8] [0.2 0.8] [0.1 0.7]]] "%" [[[0.0 0.8] [1.0 0.2]] [[0.2 0.2] [0.3 0.2] [0.3 0.3] [0.2 0.3] [0.2 0.2]] [[0.7 0.7] [0.8 0.7] [0.8 0.8] [0.7 0.8] [0.7 0.7]]] "^" [[[0.1 0.3] [0.5 0.0] [0.9 0.3]]] "&" [[[1.0 1.0] [0.1 0.3] [0.1 0.1] [0.2 0.0] [0.6 0.0] [0.7 0.1] [0.7 0.3] [0.0 0.7] [0.0 0.9] [0.1 1.0] [0.5 1.0] [1.0 0.7]]] "*" [[[0.5 0.0] [0.5 0.5]] [[0.1 0.1] [0.9 0.4]] [[0.9 0.1] [0.1 0.4]]] "-" [[[0.2 0.5] [0.8 0.5]]] "_" [[[0.0 1.0] [1.0 1.0]]] "+" [[[0.5 0.3] [0.5 0.7]] [[0.1 0.5] [0.9 0.5]]] "=" [[[0.2 0.4] [0.8 0.4]] [[0.2 0.6] [0.8 0.6]]] " " []}) (defn draw-curves [curves x-offset y-offset scale] (let [char-width scale char-height (* char-width 2.0)] (doseq [curve curves] (quil/begin-shape) (doseq [[x y] curve] (quil/vertex (+ x-offset (* char-width x)) (+ y-offset (* char-height y)))) (quil/end-shape)))) (defn enumerate [s] (map-indexed vector s)) (defn write-something [] (quil/background 255 255 255) (quil/stroke 0 0 0) (quil/stroke-weight 10) (quil/no-fill) (let [scale (* quil/width 0.02) spacing (* quil/width 0.03)] (doseq [[index c] (enumerate "HELLO WORLD")] (let [x-offset (+ (* quil/width 0.05) (* index spacing)) y-offset (* quil/width 0.05) curves (get char-layouts (str c) char-placeholder)] (draw-curves curves x-offset y-offset scale)))))