DIRECTORY SV2d, SVMatrix2d, SVVector2d; SVCoordSys2d: DEFINITIONS = BEGIN Matrix3by3: TYPE = SVMatrix2d.Matrix3by3; Point2d: TYPE = SV2d.Point2d; Vector2d: TYPE = SVVector2d.Vector2d; CoordSystem2d: TYPE = REF CoordSystem2dObj; CoordSystem2dObj: TYPE = RECORD [ mat: Matrix3by3, localWRTPad: Matrix3by3, padWRTLocal: Matrix3by3, withRespectTo: CoordSystem2d]; CreateCoordSys: PROC [mat: Matrix3by3, withRespectTo: CoordSystem2d] RETURNS [newCS: CoordSystem2d]; TellCoordSysAboutPad: PROC [cs: CoordSystem2d]; PadToScreen: PROC [padPoint: Point2d, screen: CoordSystem2d] RETURNS [screenPoint: Point2d]; ScreenToPad: PROC [screenPoint: Point2d, screen: CoordSystem2d] RETURNS [padPoint: Point2d]; FindInTermsOfPad: PROC [cs: CoordSystem2d] RETURNS [mat: Matrix3by3]; FindAinTermsOfB: PROC [a: CoordSystem2d, b: CoordSystem2d] RETURNS [aInTermsOfb: Matrix3by3]; FindTranslationOfAinTermsOfB: PROC [a: CoordSystem2d, b: CoordSystem2d] RETURNS [displacements: Vector2d]; PutAinTermsOfB: PROC [a: CoordSystem2d, b: CoordSystem2d] RETURNS [aInTermsOfb: Matrix3by3]; -- finds the matrix and redefines CoordSystem a to be in terms of b from now on. PlaceAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL, aWRTb: Matrix3by3]; -- places a in PAD so that the transform from b to a is aWRTb. Updates a with respect to its immediate reference (a.withRespectTo) accordingly. PlaceTranslationAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL, origin: Point2d]; -- places a in PAD so that the rotation from a to b remains as it is, but the translation is set to origin. Updates a with respect to its immediate reference (a.withRespectTo) accordingly. TranslateAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL, tx, ty: REAL]; RotateCCWAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL, degrees: REAL]; AlignAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL]; -- rotate A as little as possible to align its two axes parallel to two of the axes of B (though not necessarily the same two). AbutAwrtB: PROC [a: CoordSystem2d, b: CoordSystem2d _ NIL]; -- equivalent to PlaceTranslationAwrtB where origin = [0, 0] -- these perform the named transform but do not change the coordinate system with respect to which CoordSystem a is defined. -- when b is NIL, assumes b = PAD. -- for local transforms, let b = a. END. ģ-- File: SVCoordSys2d.mesa -- Last edited by Bier on December 18, 1982 1:03 am -- Author: Eric Bier on December 18, 1982 1:12 am -- Contents: Routines for manipulating coordinate systems with respect to each other in 2 dimensions Ź˜JšĻcå™åJšwœĻk œ2ž œžœžœ#žœžœ(žœžœ%žœžœkĻnœžœ1žœŸœžœŸ œžœ,žœŸ œžœ/žœŸœžœžœŸœžœ&žœŸœžœ&žœŸœžœ&žœQœŸ œžœ'žœ‘Ÿœžœ'žœ¾œŸœžœ'žœ žœŸœžœ'žœ žœŸ œžœ'žœ€Ÿ œžœ'žœ=œÄœžœ˜Ø—…— * 3