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 FlexFoot(heel, toe, plant, hip, away) : if insole == (- 0.15, 0.5) rel (heel, away, toe) , outsole == (0.15, 0.5) rel (heel, away, toe) , thick == (0.15, 0) rel (heel, toe) | T -> if arch == (0., 0.1) rel (plant, toe, hip) | (arch, plant) para (heel, hip) and (arch, plant) cong (heel, thick) -> black paint if foo == (0, 0) rel (arch) | T -> QuarterEllipse(plant, outsole, toe) ; QuarterEllipse(plant, outsole, heel) ; QuarterEllipse(plant, arch, toe) ; QuarterEllipse(plant, arch, heel) ; FillLune(plant, insole, outsole, toe) ; FillLune(plant, insole, outsole, heel) ; FillLune(plant, insole, arch, toe) ; FillLune(plant, insole, arch, heel) ; QuarterEllipse(plant, insole, toe) ; QuarterEllipse(plant, insole, heel) fi fi fi FlexLeg(hip, heel, toe, away) : if knee == (0.5, 0.25) rel (heel, hip, toe) , plant == (0, 0.5) rel (heel, away, toe) , f1 == (1.04, 0.1) rel (heel, hip, toe) , f2 == (0.86, 0.36) rel (heel, hip, toe) , f3 == (0.59, 0.44) rel (heel, hip, toe) , f4 == (0.22, 0.43) rel (heel, hip, toe) , b1 == (1., - 0.1) rel (heel, hip, toe) , b2 == (0.78, 0.23) rel (heel, hip, toe) , b3 == (0.4, 0.28) rel (heel, hip, toe) | T -> if arch == (0.5, 0.1) rel (heel, toe, hip) , thick == (0.15, 0) rel (heel, toe) | (arch, plant) para (heel, hip) and (arch, plant) cong (heel, thick) -> FlexFoot(heel, toe, plant, hip, away) ; black paint stroke (f1, f2, f3, f4) ; stroke (b1, b2, b3, heel) ; fill (f1, f2, f3, f4) , (f4, heel) , (heel, b3, b2, b1) , (b1, f1) fi fi FlexThing (center , rightEar , nose , tip , rightHeel , rightToe , leftHeel , leftToe , look) : if leftHip == (- 0.7, - 0.7) rel (center, tip, rightEar) , rightHip == (- 0.7, 0.7) rel (center, tip, rightEar) , leftRef == (1, 1) rel (center, leftHeel, rightEar) , rightRef == (1, 1) rel (center, rightHeel, rightEar) | T -> yellow paint FlexLeg(rightHip, rightHeel, rightToe, rightRef) ; FlexBody(center, nose, rightEar, tip, look) ; FlexLeg(leftHip, leftHeel, leftToe, leftRef) fi FlexBody(center, nose, ear, tip, look) : if nx == (0, 0) rel (nose) , ex == (0, 0) rel (ear) , tx == (0, 0) rel (tip) , exr == (0, 0) rel (ear) , txr == (0, 0) rel (tip) , enx == (0, 0) rel (nose) , border == (0.7, 0.7) rel (center, nose, ear) | ver (nose, nx) and hor (nx, center) and ver (ear, ex) and hor (ex, center) and ver (tip, tx) and hor (tx, center) and ver (exr, center) and (ex, center) cong (exr, center) and ver (txr, center) and (tx, center) cong (txr, center) and hor (enx, center) and (enx, center) cong (nx, exr) and (border, center) para (nose, center) and (border, center) cong (enx, txr) -> Head(center, border, nose, ear, tip, look) 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 -> stroke4(c, f, k, b) ; fill (a, c), (c, f, k, b), (b, a) fi Eye(m, a, h, p) : if b == (1.55, 0) rel (m, a) , c == (1, 1) rel (m, a, h) , pa == (1, 1) rel (m, a, p) , pb == (1.2, 1) rel (m, a, p) , pc == (1, 0.6) rel (m, a, h) | (pa, pc) para (a, c) and (pa, pb) para (a, b) -> cyan paint FillEllipse(a, b, c) ; black paint FillEllipse(pa, pb, pc); Ellipse(a, b, c) fi Eyes(m, r, h, p) : if l == (- 1, 0) rel (m, r, h) | T -> Eye(m, r, h, p); Eye(m, l, h, p) fi Head(center, border, nose, ear, tip, look) : if e == (0., 1.) rel (center, border) , d == (0., - 1.) rel (center, border) , c == (- 1., - 0.) rel (center, border) , mideye == (0.916, 0.4) rel (center, nose, tip) , topeye == (0.835, 0.55) rel (center, nose, tip) | T -> QuarterBody(center, e) ; QuarterBody(center, c) ; QuarterBody(center, d) ; QuarterBody(center, border) ; if eye == (1, 0.15) rel (center, mideye, ear) | T -> if pupil == (1, 0.01) rel (center, eye, look) | T -> Eyes(mideye, eye, topeye, pupil) fi fi ; Smile(center, nose, ear, tip, border) fi Smile(a, nose, ear, tip, b) : if nn == (1, - 0.2) rel (center, nose, tip) , endsm == (- 0.916, 0.4) rel (center, ear, nose) | T -> if begsm == (0, 0) rel (nose) | (begsm, center) para (nn, center) and (begsm, center) cong (border, center) -> if pp == (0, 1) rel (center, begsm) , eder == (0.5, 1) rel (center, begsm, endsm) | T -> if bder == (1, 1) rel (center, begsm) | (center, ear) cong (begsm, bder) and (center, pp) para (begsm, bder) -> black paint round ends stroke (begsm, bder, endsm, endsm) ; Curl(eder, endsm) fi fi fi 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 Test(center, border, nose, ear, tip, look) : yellow paint Head(center, border, nose, ear, tip, look) stroke4(a, b, c, d): black paint stroke (a, b, c, d)