<> <> <> <> SV2d: CEDAR DEFINITIONS = BEGIN Point2d: TYPE = ARRAY[1..2] OF REAL; Vector2d: TYPE = ARRAY[1..2] OF REAL; Matrix3by3: TYPE = ARRAY [1..3] OF ARRAY [1..3] OF REAL; <> Polygon: TYPE = REF PolygonObj; PolygonObj: TYPE = RECORD [ len: NAT, seq: SEQUENCE maxVerts: NAT OF Point2d]; Path: TYPE = REF PathObj; PathObj: TYPE = RECORD [ len: NAT, seq: SEQUENCE maxVerts: NAT OF Point2d]; TrigPolygon: TYPE = REF TrigPolygonObj; TrigPolygonObj: TYPE = RECORD [ len: NAT, seq: SEQUENCE maxVerts: NAT OF TrigLineSeg]; <> LineSeg: TYPE = REF LineSegObj; LineSegObj: TYPE = RECORD [ p1, p2: Point2d, slope: REAL, xInt, yInt: REAL, isVert: BOOL ]; TrigLineSeg: TYPE = REF TrigLineSegObj; <> <> TrigLineSegObj: TYPE = RECORD [ line: TrigLine, pLo, pHi: Point2d, pLoIsFirst: BOOL]; -- Are [pLo, pHi] in the same order as [v1, v2] (the segment endpoints as they are given to CreateTrigLineSeg)? TrigLine: TYPE = REF TrigLineObj; TrigLineObj: TYPE = RECORD [ <> <> c: REAL, -- cos(theta) s: REAL, -- sin(theta) theta: REAL, -- angle in (-pi..pi] d: REAL, -- distance from line to origin slope: REAL, -- slope and yInt are redundant information but they come almost for free. yInt: REAL ]; Ray2d: TYPE = REF Ray2dObj; Ray2dObj: TYPE = RECORD [ p: Point2d, d: Vector2d]; END.