Vector2: CEDAR DEFINITIONS ~ BEGIN VEC: TYPE ~ RECORD[x, y: REAL]; Add: PROC[v1, v2: VEC] RETURNS[VEC]; InlineAdd: PROC[v1, v2: VEC] RETURNS[VEC] ~ INLINE { RETURN[[v1.x+v2.x, v1.y+v2.y]] }; Sub: PROC[v1, v2: VEC] RETURNS[VEC]; InlineSub: PROC[v1, v2: VEC] RETURNS[VEC] ~ INLINE { RETURN[[v1.x-v2.x, v1.y-v2.y]] }; Neg: PROC[v: VEC] RETURNS[VEC]; InlineNeg: PROC[v: VEC] RETURNS[VEC] ~ INLINE { RETURN[[-v.x, -v.y]] }; Mul: PROC[v: VEC, s: REAL] RETURNS[VEC]; InlineMul: PROC[v: VEC, s: REAL] RETURNS[VEC] ~ INLINE { RETURN[[v.x*s, v.y*s]] }; Div: PROC[v: VEC, s: REAL] RETURNS[VEC]; InlineDiv: PROC[v: VEC, s: REAL] RETURNS[VEC] ~ INLINE { RETURN[[v.x/s, v.y/s]] }; MulC: PROC[v1, v2: VEC] RETURNS[VEC]; InlineMulC: PROC[v1, v2: VEC] RETURNS[VEC] ~ INLINE { RETURN[[v1.x*v2.x, v1.y*v2.y]] }; DivC: PROC[v1, v2: VEC] RETURNS[VEC]; InlineDivC: PROC[v1, v2: VEC] RETURNS[VEC] ~ INLINE { RETURN[[v1.x/v2.x, v1.y/v2.y]] }; Dot: PROC[v1, v2: VEC] RETURNS[REAL]; InlineDot: PROC[v1, v2: VEC] RETURNS[REAL] ~ INLINE { RETURN[v1.x*v2.x+v1.y*v2.y] }; Cross: PROC[v1, v2: VEC] RETURNS[REAL]; InlineCross: PROC[v1, v2: VEC] RETURNS[REAL] ~ INLINE { RETURN[v1.x*v2.y-v1.y*v2.x] }; Square: PROC[v: VEC] RETURNS[REAL]; InlineSquare: PROC[v: VEC] RETURNS[REAL] ~ INLINE { RETURN[v.x*v.x+v.y*v.y] }; Length: PROC[v: VEC] RETURNS[REAL]; Unit: PROC[v: VEC] RETURNS[VEC]; END. 4Vector2.mesa Copyright c 1985 by Xerox Corporation. All rights reserved. Doug Wyatt, March 7, 1985 1:20:28 pm PST Defines VEC, a two dimensional vector type, and several useful vector operations. Sum, v1+v2. Difference, v1-v2. Negative, -v. Multiplication by a scalar, sv. Division by a scalar, v/s. Componentwise multiplication. Componentwise division. Dot (inner) product, v19v2 = |v1| |v2| cos(theta). Magnitude of cross (outer) product, |v1Xv2| = |v1| |v2| sin(theta). Square, v9v = |v||v|. Length (magnitude), |v| = SqRt[v9v]. Unit vector, v/|v|. ΚΞ˜codešœ ™ Kšœ Οmœ1™