QuarterEllipse(a, b, c) : if k == (1., 0.552) rel (a, b, c) , f == (0.552, 1.) rel (a, b, c) | T -> stroke (c, f, k, b) fi Ellipse(a, b, c) : if e == (0., 1.) rel (a, b, c) , d == (0., - 1.) rel (a, b, c) , c == (- 1., - 0.) rel (a, b, c) | T -> QuarterEllipse(a, b, e) ; QuarterEllipse(a, e, c) ; QuarterEllipse(a, c, d) ; QuarterEllipse(a, d, b) fi FillQuarterEllipse(a, b, c) : if k == (1., 0.552) rel (a, b, c) , f == (0.552, 1.) rel (a, b, c) | T -> fill (c, f, k, b), (b, a), (a, c) fi FillEllipse(a, b, c) : if d == (- 1, 0) rel (a, b, c) , e == (0, - 1) rel (a, b, c) | T -> FillQuarterEllipse(a, b, c) ; FillQuarterEllipse(a, c, d) ; FillQuarterEllipse(a, d, e) ; FillQuarterEllipse(a, e, b) fi FillLune(a, b1, b2, c) : if k1 == (1., 0.552) rel (a, b1, c) , f1 == (0.552, 1.) rel (a, b1, c) , k2 == (1., 0.552) rel (a, b2, c) , f2 == (0.552, 1.) rel (a, b2, c) | T -> fill (c, f1, k1, b1), (b1, b2), (b2, k2, f2, c) fi QuarterCircle(a, b) : if c == (0, 1) rel (a, b) | T -> QuarterEllipse(a, b, c) fi Circle(a, b) : if c == (0, 1) rel (a, b) | T -> Ellipse(a, b, c) fi stroke4(a, b, c, d): black paint stroke (a, b, c, d) Coeur(a, b) : if f == (0.3185, 0.9218) rel (a, b) , e == (- 0.4127, 0.4211) rel (a, b) , d == (- 0.4127, - 0.4211) rel (a, b) , c == (0.3185, - 0.9218) rel (a, b) | (c, f) para (d, e) and (a, e) cong (d, a) and (a, f) cong (c, a) and (b, f) cong (c, b) -> red paint fill (a, d, c, b), (b, f, e, a) fi QuarterBody(a, b) : if k == (1., 0.552) rel (a, b) , f == (0.552, 1.) rel (a, b) , c == (0., 1.) rel (a, b) | T -> black paint stroke (c, f, k, b) ; fill (a, c), (c, f, k, b), (b, a) fi QuarterFilledElipse(a, b, c) : if k == (1., 0.552) rel (a, b, c) , f == (0.552, 1.) rel (a, b, c) | T -> fill (b, k, f, c), (c, a), (a, b) ; black paint draw (b, k, f, c) fi FilledEllipses(a, b, c, x) : if y == (1, 0.9) rel (a, x, b) , z == (0.9, 1) rel (a, c, x) | T -> FilledEllipse(a, b, c); FilledEllipse(x, y, z) fi Eyes(m, r, h, p) : if l == (- 1, 0) rel (m, r, h) , b == (1.55, 0) rel (m, r, h) , c == (1, 1) rel (m, r, h) , k == (2, 1) rel (r, m, p) , d == (1, 0.33) rel (m, p, r) , e == (1, 0.6) rel (m, p, h) | T -> cyan paint FilledEllipses(r, b, c, l) ; black paint FilledEllipses(p, d, e, k) fi Curl(a, b) : if f == (0.95, - 0.1) rel (a, b) , e == (1., - 0.05) rel (a, b) , d == (1., 0.05) rel (a, b) , c == (0.95, 0.1) rel (a, b) | T -> black paint stroke (c, d, e, f) fi Smile(a, b) : if e == (1, 0.57) rel (a, b) , h == (0.3, 0.53) rel (a, b) , k == (- 0.12, 0.17) rel (a, b) , f == (1, 0.6) rel (a, b) , i == (0.3, 0.57) rel (a, b) | T -> black paint fill (b, e, h, k), (k, i, f, b) ; black paint round ends stroke (b, e, h, k) ; round ends stroke (k, i, f, b); Curl(h, k) fi Body(a, b) : if e == (0., 1.) rel (a, b) , d == (0., - 1.) rel (a, b) , c == (- 1., - 0.) rel (a, b) , m == (0.48, - 0.53) rel (a, b) , r == (0.37, - 0.45) rel (a, b) , h == (0.37, - 0.65) rel (a, b) , p == (0.38, - 0.46) rel (a, b) | T -> QuarterBody(a, e) ; QuarterBody(a, c) ; QuarterBody(a, d) ; QuarterBody(a, b) ; Eyes(m, r, h, p) ; Smile(a, b) fi UncoloredThing(center, base) : if lhip == (0.4, 0.29) rel (center, base) , lheel == (1.15, 0.55) rel (center, base) , ltoe == (1.25, - 0.65) rel (center, base) , nose == (0.219, - 0.5661) rel (center, base) , rhip == (0.18, - 0.06) rel (center, base) , rheel == (0.9, 0.2) rel (center, base) , rtoe == (0.98, - 0.93) rel (center, base) , w == (0.01, 0) rel (center, base) | T -> center, w width round ends Leg(rhip, rheel, rtoe) ; Body(center, nose) ; Leg(lhip, lheel, ltoe) fi Thing(a, b): lightred paint UncoloredThing(a, b) ThingPlaced(a, b) : if e == (0.5209, 0.3603) rel (a, b) , d == (0.3612, 0.4803) rel (a, b) , c == (0.6806, 0.2402) rel (a, b) | (e, c) cong (d, e) and (c, b) cong (d, c) and hor (b, d) and hor (c, d) and ver (a, d) -> Thing(c, b) fi Dot(x): 6 width round ends black paint stroke (x, x) Dots(x, y): red paint draw (x, y) ThigsGalore(a) : if a5 == (- 23., - 514.) rel (a) , a4 == (- 28., - 197.) rel (a) , a3 == (- 29., - 488.) rel (a) , a2 == (- 29., - 56.) rel (a) , a1 == (- 29., - 12.) rel (a) , a0 == (- 30., - 340.) rel (a) , z == (- 31., - 119.) rel (a) , y == (- 32., - 243.) rel (a) , x == (- 33., - 365.) rel (a) , w == (- 33., - 584.) rel (a) , v == (- 34., - 143.) rel (a) , u == (- 35., - 273.) rel (a) , t == (- 40., - 406.) rel (a) , s == (- 43., - 449.) rel (a) , r == (- 45., - 475.) rel (a) , q == (- 46., - 171.) rel (a) , p == (- 47., 16.) rel (a) , o == (- 49., - 41.) rel (a) , n == (- 51., - 303.) rel (a) , m == (- 51., - 78.) rel (a) , l == (- 54., - 615.) rel (a) , k == (- 71., - 115.) rel (a) , j == (- 73., - 440.) rel (a) , i == (- 82., - 545.) rel (a) , h == (- 91., - 225.) rel (a) , g == (- 124., - 359.) rel (a) , f == (- 133., - 505.) rel (a) , e == (- 204., - 261.) rel (a) , d == (- 208., - 605.) rel (a) , c == (- 320., 22.) rel (a) | T -> ThingPlaced(a, z) ; ThingPlaced(a, q) ; ThingPlaced(a, y) ; ThingPlaced(a, n) ; ThingPlaced(a, a0) ; ThingPlaced(a, x) ; ThingPlaced(a, s) ; ThingPlaced(a, a3) ; ThingPlaced(a, i) ; ThingPlaced(a, j) ; ThingPlaced(a, g) ; ThingPlaced(a, h) ; ThingPlaced(a, w) ; ThingPlaced(a, a5) ; ThingPlaced(a, t) ; ThingPlaced(a, u) ; ThingPlaced(a, a4) ; ThingPlaced(a, r) ; ThingPlaced(a, l) ; ThingPlaced(a, f) ; ThingPlaced(a, d) ; ThingPlaced(a, e) ; ThingPlaced(a, v) ; ThingPlaced(a, m) ; ThingPlaced(a, k) ; ThingPlaced(a, a2) ; ThingPlaced(a, o) ; ThingPlaced(a, c) ; ThingPlaced(a, p) ; ThingPlaced(a, a1) fi