(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) (* by Marc H. Brown *) (* Last modified on Tue Feb 11 16:25:16 PST 1992 by muller *) (* modified on Tue Dec 17 13:11:37 PST 1991 by mhb *) MODULE Trapezoid; IMPORT Point; PROCEDURE FromEdges (y1, p1, q1: INTEGER; y2, p2, q2: INTEGER): T = VAR t: T; west1 := MIN(p1, q1); east1 := MAX(p1, q1); west2 := MIN(p2, q2); east2 := MAX(p2, q2); BEGIN t.vlo := MIN(y1, y2); t.vhi := MAX(y1, y2); t.m1.n := y1 - y2; t.m1.d := west1 - west2; t.p1 := Point.FromCoords(west1, y1); t.m2.n := y1 - y2; t.m2.d := east1 - east2; t.p2 := Point.FromCoords(east1, y1); RETURN t; END FromEdges; PROCEDURE FromVertices (READONLY p1, p2, q1, q2: Point.T): T = BEGIN RETURN FromEdges(p1.v, p1.h, p2.h, q1.v, q1.h, q2.h); END FromVertices; PROCEDURE FromTriangle (READONLY a, b, c: Point.T): T = BEGIN IF a.v = b.v THEN RETURN FromVertices(a, b, c, c) ELSIF a.v = c.v THEN RETURN FromVertices(a, c, b, b) ELSE RETURN FromVertices(b, c, a, a) END; END FromTriangle; BEGIN END Trapezoid.