blob: 29f4e6d506546190665460e4a8470d545332a7f0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
#lang racket
(require "../../shared/pict.rkt")
(define (wave frame)
(let ((wave-points
(list
(make-vect 0.24 0)
(make-vect 0.37 0.5)
(make-vect 0.3 0.6)
(make-vect 0.15 0.5)
(make-vect 0 0.7)
(make-vect 0 0.85)
(make-vect 0.15 0.65)
(make-vect 0.35 0.7)
(make-vect 0.4 0.7)
(make-vect 0.3 0.85)
(make-vect 0.36 1)
(make-vect 0.57 1)
(make-vect 0.62 0.855)
(make-vect 0.55 0.7)
(make-vect 0.65 0.7)
(make-vect 1 0.35)
(make-vect 1 0.25)
(make-vect 0.55 0.52)
(make-vect 0.7 0)
(make-vect 0.55 0)
(make-vect 0.45 0.4)
(make-vect 0.34 0)))
(smile
(list
(make-vect 0.4 0.8)
(make-vect 0.45 0.75)
(make-vect 0.5 0.75)
(make-vect 0.53 0.78))))
((segments->painter
(append
(line-points->segments smile)
(line-points->segments
(close-line
wave-points)))) frame)))
(paint wave)
(define (corner-split painter n)
(if (= n 0)
painter
(let ((up (up-split painter (- n 1)))
(right (right-split painter (- n 1))))
(let ((top-left up)
(bottom-right right)
(corner (corner-split painter (- n 1))))
(beside (below painter top-left)
(below bottom-right corner))))))
(paint (corner-split einstein 4))
(define (square-limit painter n)
(let ((s (lambda (f)
(lambda (painter) (f (corner-split (flip-horiz painter) n))))))
((square-of-four
(s flip-horiz)
(s (lambda (x) x))
(s <-rotate180)
(s flip-vert))
painter)))
(paint (square-limit einstein 2))
|