(* This figure shows a device for trisecting an angle. See the file "StolfiTrisector.juno" for comparison. *) CONST Dist1 = 1.5 * Unit.In, Dist2 = 0.6 * Unit.In; PRED IsDist1(a, b) IS Dist1 = Geometry.Dist(a, b) END; UI PointTool(IsDist1); PRED IsDist2(a, b) IS Dist2 = Geometry.Dist(a, b) END; UI PointTool(IsDist2); PRED V(a, b, c) IS IsDist2(a, c) AND (a, c) CONG (b, c) END; UI PointTool(V); PROC DrawV(a, b, c) IS SAVE PS IN PS.MoveTo(a); PS.LineTo(c); PS.LineTo(b); PS.SetColor(Color.Red); PS.Stroke() END END; UI PointTool(DrawV); PROC Cmd0() IS IF VAR a = (-36.922363, 169.00262), b = (-122.12782, -96.18767), c ~ (-61.884007, -108.41905), d ~ (-0.424327, -107.13822), e ~ (59.25765, -92.40755), f ~ (-69.95931, 66.17967), g ~ (-46.60081, 61.43716), h ~ (-22.770882, 61.93379), i ~ (0.36977118, 67.64535), n ~ (-49.602497, 28.07665), o ~ (-18.38192, 28.727306) IN Geometry.Colinear(b, f, a) AND Geometry.Colinear(c, g, a) AND Geometry.Colinear(d, h, a) AND Geometry.Colinear(e, i, a) AND Geometry.Colinear(c, n, a) AND Geometry.Colinear(d, o, a) AND IsDist1(a, f) AND (f, a) CONG (a, g) AND (f, a) CONG (a, h) AND (f, a) CONG (a, i) AND V(f, h, n) AND V(g, i, o) AND (b, a) CONG (a, c) AND (b, a) CONG (a, d) AND (b, a) CONG (a, e) -> PS.MoveTo(b); PS.LineTo(a); PS.LineTo(e); PS.MoveTo(c); PS.LineTo(a); PS.LineTo(d); PS.SetWidth(2); PS.SetJointStyle(PS.BevelJoints); PS.Stroke(); DrawV(f, h, n); DrawV(g, i, o) END FI END;