#lang racket
(require (planet wcy/mpost-wrapper))
(provide main)
(define (main)
(define (bezier n A B C D)
(let* ((a1 A)
(a2 B)
(a3 C)
(a4 D)
(a12 (mediation 1/2 a1 a2))
(a23 (mediation 1/2 a2 a3))
(a34 (mediation 1/2 a3 a4))
(a123 (mediation 1/2 a12 a23))
(a234 (mediation 1/2 a23 a34))
(a1234(mediation 1/2 a123 a234)))
(if (> n 0)
(begin
(bezier (- n 1) a1 a12 a123 a1234)
(bezier (- n 1) a1234 a234 a34 a4))
(draw a1234 #:withpen (scale '2bp 'pencircle)))))
(let* ((u '1cm)
(A (point 0 0))
(B (point (op* -1 u) (op* 2 u)))
(C (point (op* 3 u) (op* 3 u)))
(D (point (op* 2 u) 0)))
(for ((A (in-list (list A B C D))))
(draw A #:withpen (scale '4bp 'pencircle)))
(bezier 5 A B C D)))