src/looms/005-simple-triangulations.lisp @ 148a6a1cc9eb
Add simple triangulations
author |
Steve Losh <steve@stevelosh.com> |
date |
Tue, 06 Mar 2018 22:40:20 -0500 |
parents |
(none) |
children |
abd8097693a4 |
(in-package :flax.looms.005-simple-triangulations)
;; https://mattdesl.svbtle.com/pen-plotter-1
(defparameter *point-size* 0.004)
(defun convert-point (point)
(flax.drawing:circle point *point-size*))
(defun convert-triangle (tri)
(destructuring-bind (a b c) tri
(flax.drawing:triangle a b c)))
(defun convert (points)
(append
(map 'list #'convert-point points)
(map 'list #'convert-triangle (triangulate points))))
(defun triangulate (points)
(mapcar (lambda (indexes)
(map 'list (curry #'aref points) indexes))
(lofi.tri:triangulate (map 'vector #'coord-to-cons points))))
(defun gauss ()
(clamp 0.0 1.0 (random-gaussian 0.5 0.15 #'rand)))
(defun generate-point-uniform ()
(coord (rand 1.0) (rand 1.0)))
(defun generate-point-gaussian ()
(coord (gauss) (gauss)))
(defun generate-point-gaussian-vertical ()
(coord (rand 1.0) (gauss)))
(defun generate-point-gaussian-horizontal ()
(coord (gauss) (rand 1.0)))
(defun generate (generator n)
(iterate (repeat n)
(collect (funcall generator)
:result-type 'vector)))
(defun loom (seed points filename filetype width height)
(losh::clear-gaussian-spare)
(with-seed seed
(flax.drawing:with-rendering (canvas filetype filename width height
:background (hsv 0.09 0.05 0.975))
(destructuring-bind (generator generator-name)
(random-elt '((generate-point-uniform "Uniform")
(generate-point-gaussian "Gaussian")
(generate-point-gaussian-vertical "Vertical Gaussian")
(generate-point-gaussian-horizontal "Horizontal Gaussian"))
#'rand)
(flax.drawing:render canvas (convert (generate generator points)))
generator-name))))
;; (time (loom nil (* 10 (random 100)) "out" :png 800 800))