<<>> <> <> <> <<>> DIRECTORY G2dBasic, Imager; G2dMatrix: CEDAR DEFINITIONS ~ BEGIN singular: ERROR; <> Pair: TYPE ~ G2dBasic.Pair; Triple: TYPE ~ G2dBasic.Triple; Rectangle: TYPE ~ Imager.Rectangle; Matrix: TYPE ~ RECORD [row1, row2, row3: Triple]; << That is, [row1.x row1.y row1.z]>> << [row2.x row2.y row2.z]>> << [row3.x row3.y row3.z]>> <> Identity: PROC RETURNS [Matrix]; <> Transpose: PROC [m: Matrix] RETURNS [Matrix]; <> <<>> Determinant: PROC [m: Matrix] RETURNS [REAL]; <> <<>> Adjoint: PROC [m: Matrix] RETURNS [Matrix]; <> Invert: PROC [m: Matrix] RETURNS [Matrix]; <> <<>> Mul: PROC [left, rite: Matrix] RETURNS [Matrix]; <> <<>> Rotate: PROC [mat: Matrix, radians: REAL] RETURNS [Matrix]; <> <<>> Scale: PROC [mat: Matrix, scale: Pair] RETURNS [Matrix]; <> <<>> Translate: PROC [mat: Matrix, translate: Pair] RETURNS [Matrix]; <> <<>> Transform: PROC [p: Triple, mat: Matrix] RETURNS [Triple]; <> <> UnitSquareToQuadrilateral: PROC [p1, p2, p3, p4: Pair] RETURNS [Matrix]; <> <<>> QuadrilateralToRectangle: PROC [p1, p2, p3, p4: Pair, rectangle: Rectangle] RETURNS [Matrix]; <> END.