examples/ex-139.rkt
#lang racket
(require (planet wcy/mpost-wrapper))
(provide main)
(define (main)
  (define (i-of-360 i n) (/ (* 360 i ) n))
  (let* ((u '0.5cm)
         (P* (for/list ((i (in-range 5)))
                       (rotate (i-of-360 i 5)
                               (op* u 'down))))
         (P `(,@P* ,(car P*)))
         (Q* (for/list ((Pi (in-list P))
                        (Pi+1 (in-list (cdr P))))
                       (op* 3 (mediation 0.5 Pi Pi+1))))
         (Q `(,@Q* ,(car Q*)))         
         (R* (for/list ((Qi (in-list Q))
                        (Qi+1 (in-list (cdr Q)))
                        (Pi+1 (in-list (cdr P))))
                       (op* 1/3 (op+ Qi Qi+1 Pi+1))))
         (R `(,@R* ,(car R*)))
         (S (map (curry op* 1.5) Q)))
    (for ((Pi (in-list P))
          (Pi+1 (in-list (cdr P)))
          (Qi (in-list Q))
          (Qi+1 (in-list (cdr Q)))
          (Ri (in-list R))
          (Si (in-list S))
          (Si+1 (in-list (cdr S))))
         (draw (op-- Pi Pi+1))
         (draw (op-- Pi+1 Ri))
         (draw (op-- Qi Ri))
         (draw (op-- Ri Qi+1))
         (draw (op-- Qi Si))
         (draw (op-- Si Si+1)))
    (draw (op-- (list-ref P 2)  (list-ref P 3)  (list-ref P 4)  (list-ref P 0)  (list-ref P 1) 
                (list-ref R 0)  (list-ref Q 0)  (list-ref R 4)  (list-ref Q 4)  (list-ref R 3)
                (list-ref Q 3)  (list-ref R 2)  (list-ref Q 2) 
                (list-ref S 2)  (list-ref S 3)  (list-ref S 4)  (list-ref S 0)  (list-ref S 1) 
                (list-ref Q 1)  (list-ref R 1)  'cycle)
          #:withpen (scale '2bp 'pencircle))))