DIRECTORY Vector2; Vector3d: CEDAR DEFINITIONS ~ BEGIN RealSequence: TYPE ~ REF RealSequenceRep; RealSequenceRep: TYPE ~ RECORD [ length: CARDINAL _ 0, element: SEQUENCE maxLength: CARDINAL OF REAL ]; Pair: TYPE ~ Vector2.VEC; PairSequence: TYPE ~ REF PairSequenceRep; PairSequenceRep: TYPE ~ RECORD [ length: CARDINAL _ 0, element: SEQUENCE maxLength: CARDINAL OF Pair ]; Triple: TYPE ~ RECORD [x, y, z: REAL]; TripleSequence: TYPE ~ REF TripleSequenceRep; TripleSequenceRep: TYPE ~ RECORD [ length: CARDINAL _ 0, element: SEQUENCE maxLength: CARDINAL OF Triple ]; Quad: TYPE ~ RECORD [x, y, z, w: REAL]; Line: TYPE ~ RECORD [base, axis: Triple]; MinMax: TYPE ~ RECORD [min, max: Triple]; origin: Triple ~ [0.0, 0.0, 0.0]; xAxis: Triple ~ [1.0, 0.0, 0.0]; yAxis: Triple ~ [0.0, 1.0, 0.0]; zAxis: Triple ~ [0.0, 0.0, 1.0]; Null: PROC [v: Triple] RETURNS [BOOL]; Negate: PROC [v: Triple] RETURNS [Triple]; Normalize: PROC [v: Triple] RETURNS [Triple]; Unitize: PROC [v: Triple] RETURNS [Triple]; Mul: PROC [v: Triple, s: REAL] RETURNS [Triple]; Div: PROC [v: Triple, s: REAL] RETURNS [Triple]; Add: PROC [v1, v2: Triple] RETURNS [Triple]; Sub: PROC [v1, v2: Triple] RETURNS [Triple]; Equal: PROC [v1, v2: Triple, epsilon: REAL _ 0.001] RETURNS [BOOL]; Dot: PROC [v1, v2: Triple] RETURNS [REAL]; Cross: PROC [v1, v2: Triple] RETURNS [Triple]; Average: PROC [v1: Triple, v2: Triple] RETURNS [Triple]; Combine: PROC [v1: Triple, s1: REAL, v2: Triple, s2: REAL] RETURNS [Triple]; Ray: PROC [l: Line, d: REAL] RETURNS [Triple]; MulVectors: PROC [v1, v2: Triple] RETURNS [Triple]; DivVectors: PROC [v1, v2: Triple] RETURNS [Triple]; Length: PROC [v: Triple] RETURNS [REAL]; SquareLength: PROC [v: Triple] RETURNS [REAL]; Distance: PROC [p1, p2: Triple] RETURNS [REAL]; SquareDistance: PROC [p1, p2: Triple] RETURNS [REAL]; SameLength: PROC [v1, v2: Triple] RETURNS [Triple]; Collinear: PROC [p1, p2, p3: Triple, epsilon: REAL _ 0.01] RETURNS [BOOL]; VecsCoplanar: PROC [v1, v2, v3: Triple, epsilon: REAL _ 0.005] RETURNS [BOOL]; PsCoplanar: PROC [p1, p2, p3, p4: Triple, epsilon: REAL _ 0.005] RETURNS [BOOL]; Parallel: PROC [v1, v2: Triple, epsilon: REAL _ 0.005] RETURNS [BOOL]; Perpendicular: PROC [v1, v2: Triple, epsilon: REAL _ 0.005] RETURNS [BOOL]; LinePoint: PROC [p: Triple, l: Line] RETURNS [Triple]; Project: PROC [v1, v2: Triple] RETURNS [Triple]; PtOnLine: PROC [p: Triple, l: Line, epsilon: REAL _ 0.005] RETURNS [BOOL]; V90: PROC [v0, v1: Triple] RETURNS [Triple]; Ortho: PROC [v: Triple, crosser: Triple _ [0.0, 0.0, 1.0]] RETURNS [Triple]; RotateAbout: PROC [v, axis: Triple, a: REAL, degrees: BOOL _ TRUE] RETURNS [Triple]; PolarFromCartesian: PROC [cartesian: Triple] RETURNS [Triple]; CartesianFromPolar: PROC [polar: Triple] RETURNS [Triple]; CopyRealSequence: PROC [reals: RealSequence] RETURNS [RealSequence]; CopyPairSequence: PROC [pairs: PairSequence] RETURNS [PairSequence]; CopyTripleSequence: PROC [triples: TripleSequence] RETURNS [TripleSequence]; ArcCos: PROC [cos: REAL, degrees: BOOL _ TRUE] RETURNS [REAL]; CosineBetween: PROC [v0, v1: Triple] RETURNS [REAL]; AngleBetween: PROC [v0, v1: Triple, degrees: BOOL _ TRUE] RETURNS [REAL]; MinMaxOfTriples: PROC [triples: TripleSequence] RETURNS [MinMax]; END. VVector3d.mesa Copyright c 1984 by Xerox Corporation. All rights reserved. Bloomenthal, February 26, 1987 7:06:20 pm PST Standard Geometric Operations on 3d vectors or points Types and Constants Basic Operations on a Single Vector Returns TRUE iff v is the origin. Vector negation: return -v. Vector normalization: return v/|v|. Same as Normalize. Vector scalar multiplication: return s*v. Vector scalar division: return v/s; division not performed if s = 0. Basic Operations on Two Vectors Vector additon: return v1+v2. Vector subtraction: return v1-v2. Returns TRUE iff v1 = v2, to within epsilon. Vector dot product: return v1.v2. Right handed vector cross product: v1Xv2. Return 0.5*(v1+v2). Return s1*v1+s2*v2. Return l.base+d*l.axis. Return v1*v2. Return v1/v2; component division not performed if v2 component = 0. Length and Distance Operations Vector length: return SqRt[v.v] = |v|. Vector length squared: return |v||v| (same as Dot[v, v]). Distance between two points. Distance squared between two points. Return v2 adjusted to be same magnitude as v1. Parallelness, Coplanarity and Collinearity Tests Return TRUE iff the three points are colinear, to within epsilon. Return TRUE iff the three vectors are coplanar. Return TRUE iff the four points are coplanar, ie., all within epsilon distance of a plane. Return TRUE iff the two vectors are parallel, to within epsilon. Return TRUE iff the two vectors are perpendicular, to within epsilon. Nearness Operations Return point closest to p on l. Return the vector projection of v1 onto v2. Return TRUE iff p is within epsilon of the l. Simple Geometric Operations Return vector orthogonal to v0 and in plane of v0 and v1; v0 and v1 presumed unitized. Return a vector orthonormal to both v and crosser and of the same magnitude as v; if v = crosser, an arbitrary crosser is chosen. Return v rotated around axis by a. Polar/Cartesian Coordinates Return the polar equivalent of the input cartesian vector. The returned triple's x, y, and z fields correspond to longitude, lattitude, and magnitude. The input triple's x, y, and z fields correspond to longitude, lattitude, and magnitude. Return the cartesian equivalent of the input polar vector. Copying Operations Return a copy of the input sequence of reals. Return a copy of the input sequence of pairs. Return a copy of the input sequence of triples. Miscellany Return the angle in degrees if degrees TRUE, else in radians. Return the cosine of the angle between the two vectors. Return the angle (in degrees if degrees TRUE, else in radians) between the two vectors. Return the bounding triples of the sequence. ΚΘ˜šœ ™ Jšœ Οmœ1™J™:J™[J™—š‘œžœžœ ˜:J™XJ™:——šœ™codeš‘œžœžœ˜DL™-L™—š‘œžœžœ˜DL™-L™—š‘œžœžœ˜LL™/——™ š‘œžœžœ žœžœžœžœ˜>Jšœ'Οsœ™=J™—š‘ œžœžœžœ˜4J™7J™—š ‘ œžœžœžœžœžœ˜IJšœ(€œ+™WJ™—š‘œžœžœ ˜AJ™,J˜—L™—Jšžœ˜—…— (F