examples/ex-116.rkt
#lang racket
(require (planet wcy/mpost-wrapper))
(provide main)
(define (draw-extra n p op-x)
  (let ((pn (point-of n p)))
    (draw (op-- pn (op-x pn (op* '4mm (unitvector (direction-of n p))))))))

(define (main)
  (let* ((u '2cm)
         (A0 (op* u 'up))
         (A (reverse (for/fold ((r (list A0)))
                         ((i (in-range 1 11)))
                       (cons (rotate 72 (car r)) r))))
         (B*  (for/list ((A_i (in-list A))
                         (A_i+1 (in-list (cdr A)))
                         (i (in-range 0 10)))
                        (mediation 0.5 A_i A_i+1)))
         (B (for/list ((b_i (in-range 0 10)))
                      (list-ref B* (if (= b_i 5) 0 b_i))))
         (C (for/list ((b_i (in-list B)))
                      (op* 0.8 b_i))))
    (for ((A_i (in-list A))
          (A_i+1 (in-list (cdr A))))
         (let* ((p_i (op-- A_i A_i+1)))
           (draw p_i)
           (draw-extra 1 p_i op+)
           (draw-extra 0 p_i op-)))
    (let ((p (for/list ((i (in-range 0 5)))
                       (let* ((p_i (path (list-ref B i) '--- 
                                         (list-ref C i) '..
                                         (list-ref C (+ 2 i))  (dir-spec (dir  (* 72 i)))
                                         )))
                         (draw p_i)
                         (draw-extra 2 p_i op+ )
                         (draw-extra 0 p_i op- ) p_i))))
      (for ((p_i (in-list p)))
           (draw (subpath-of 1 1.4 p_i) #:withpen (scale '4bp 'pencircle) #:withcolor 'white)
           (draw (subpath-of 0 1.5 p_i) ))
      (for ((A_i (in-list A))
            (B_i (in-list B))
            (C_i (in-list C)))
           (for ((x (in-list (list A_i B_i C_i))))
                (draw x #:withpen (scale '4bp 'pencircle)))))))