#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)))))))