<<>> <> <> <> <> <<>> <> <> <<>> <> <> < azimuth <=> longitude,>> < elevation <=> latitude,>> <> <<>> <> <<>> DIRECTORY G2dMatrix, G3dBasic; G3dMatrix: CEDAR DEFINITIONS ~ BEGIN singular: ERROR; <> <> Matrix: TYPE ~ REF MatrixRep; MatrixRep: TYPE ~ ARRAY [0..4) OF ARRAY [0..4) OF REAL; MatrixSequence: TYPE ~ REF MatrixSequenceRep; MatrixSequenceRep: TYPE ~ RECORD [ length: CARDINAL ¬ 0, element: SEQUENCE maxLength: CARDINAL OF Matrix ]; TransformOrder: TYPE ~ {pre, post}; -- type of concatenation Viewport: TYPE ~ RECORD [ scale: Pair ¬ [1.0, 1.0], aspectRecip: REAL ¬ 1.0, translate: Pair ¬ [0.0, 0.0]]; Pair: TYPE ~ G3dBasic.Pair; Triple: TYPE ~ G3dBasic.Triple; Quad: TYPE ~ G3dBasic.Quad; Ray: TYPE ~ G3dBasic.Ray; Screen: TYPE ~ G3dBasic.Screen; origin: Triple ~ G3dBasic.origin; <> CopyMatrix: PROC [matrix: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> Identity: PROC [out: Matrix ¬ NIL] RETURNS [Matrix]; <> MakeFromTriad: PROC [ v1, v2, v3: Triple, p: Triple ¬ origin, unitize: BOOL ¬ FALSE, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> MakeFromRows: PROC [r0, r1, r2, r3: Quad, out: Matrix ¬ NIL] RETURNS [Matrix]; <> MakeScale: PROC [s: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> MakeTranslate: PROC [p: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> MakeRotate: PROC [axis: Triple, theta: REAL, degrees: BOOL ¬ TRUE, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> MakeRotateAbout: PROC [ axis: Triple, theta: REAL, degrees: BOOL ¬ TRUE, base: Triple ¬ origin, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> MakePerspective: PROC [nInv, fInv, fov: REAL, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> <> <> <> <> <<>> HasPerspective: PROC [mat: Matrix] RETURNS [BOOL]; <> <<>> MakeVectorTransform: PROC [pointTransform: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> <> TransformH: PROC [p: Triple, mat: Matrix] RETURNS [Quad]; <> <> <> <> <<>> Transform: PROC [p: Triple, mat: Matrix] RETURNS [Triple]; <> TransformD: PROC [p: Triple, mat: Matrix] RETURNS [Pair]; <> <> TransformPair: PROC [p: Pair, mat: Matrix] RETURNS [Triple]; <> <> <<>> TransformPairD: PROC [p: Pair, mat: Matrix] RETURNS [Pair]; <> <> <<>> TransformQuad: PROC [q: Quad, mat: Matrix] RETURNS [Quad]; <> <<>> <> <> <<>> TransformVec: PROC [vec: Triple, mat: Matrix] RETURNS [Triple]; <> TransformVecDiffS: PROC [vec: Triple, mat: Matrix] RETURNS [Triple]; <> <<(ie., the x, y, and z scale factors are not equal).>> <<>> TransformPlane: PROC [plane: Quad, mat: Matrix, matInverse: Matrix ¬ NIL] RETURNS [Quad]; <> <> <<>> PremultiplyPlaneByMatrix: PROC [plane: Quad, m: Matrix] RETURNS [Quad]; <> <<>> TransformByViewport: PROC [p: Pair, vp: Viewport] RETURNS [Pair]; <> <> <> Scale: PROC [in: Matrix, s: REAL, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> DiffScale: PROC [in: Matrix, s: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> Rotate: PROC [in: Matrix, axis: Triple, theta: REAL, degrees: BOOL ¬ TRUE, base: Triple ¬ origin, out: Matrix ¬ NIL] RETURNS [Matrix]; <> Translate: PROC [in: Matrix, p: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> <> <<>> LocalScale: PROC [in: Matrix, s: REAL, out: Matrix ¬ NIL] RETURNS [Matrix]; <> LocalDiffScale: PROC [in: Matrix, s: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> LocalRotate: PROC [in: Matrix, axis: Triple, theta: REAL, degrees: BOOL ¬ TRUE, base: Triple ¬ origin, out: Matrix ¬ NIL] RETURNS [Matrix]; <> LocalTranslate: PROC [in: Matrix, p: Triple, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> Mul: PROC [left, rite: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> Cat: PROC [m1, m2: Matrix, m3, m4, m5, m6, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> Invert: PROC [in: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <<>> Adjoint: PROC [in: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> Cofactors: PROC [in: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> Determinant: PROC [mat: Matrix] RETURNS [REAL]; <> Transpose: PROC [in: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> ExtractRotate: PROC [m: Matrix] RETURNS [Triple]; <> <> <> <> InTermsOf: PROC [A, B: Matrix, out: Matrix ¬ NIL] RETURNS [Matrix]; <> <> <> <> <> <> <> <> <> <> <> CopyMatrixSequence: PROC [matrices: MatrixSequence] RETURNS [MatrixSequence]; <> <<>> AddToMatrixSequence: PROC [matrices: MatrixSequence, matrix: Matrix] RETURNS [MatrixSequence]; <> <<>> LengthenMatrixSequence: PROC [matrices: MatrixSequence, amount: REAL ¬ 1.3] RETURNS [MatrixSequence]; <> <> ObtainMatrix: PROC RETURNS [Matrix]; <> ReleaseMatrix: PROC [matrix: Matrix]; <> <> GetScreen: PROC [point: Triple, view: Matrix, hasPerspective: BOOL, viewport: Viewport] RETURNS [Screen]; <> <> TripleFromScreen: PROC [p: Pair, view: Matrix, viewInverse: Matrix ¬ NIL] RETURNS [Triple]; <> TripleFromScreenAndPlane: PROC [ p: Pair, plane: Quad, view: Matrix] RETURNS [Triple]; <> LineFromScreen: PROC [p: Pair, view: Matrix, viewInverse: Matrix ¬ NIL] RETURNS [Ray]; <> <<>> END.