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. x Vector2.mesa Copyright Σ 1985, 1987, 1991 by Xerox Corporation. All rights reserved. Doug Wyatt, March 7, 1985 1:20:28 pm PST Michael Plass, January 7, 1987 11:04:49 am 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, | v1 X v2 | = |v1| |v2| sin(theta). Square, v9v = |v| |v|. Length (magnitude), |v| = SqRt[v9v]. Unit vector, v / |v|. ΚN•NewlineDelimiter –(cedarcode) style™codešœ ™ Kšœ Οeœ=™HKšœ(™(K™.K™KšœΟkœF™QK™—KšΠblœžœž ˜šœž˜K˜Kšžœžœžœžœ˜ K˜Kš Οnœžœ žœžœžœ˜&š   œžœ žœžœžœ˜+Kšœžœžœ˜,K™ K˜—Kš  œžœ žœžœžœ˜&š   œžœ žœžœžœ˜+Kšœžœžœ˜,K™K˜—Kš  œžœžœžœžœ˜!š   œžœžœžœžœ˜&Kšœžœžœ˜"K™ K˜—Kš  œžœžœžœžœžœ˜*š   œžœžœžœžœžœ˜/Kšœžœžœ˜$K™K˜—Kš  œžœžœžœžœžœ˜*š   œžœžœžœžœžœ˜/Kšœžœžœ˜$K™K˜—Kš  œžœ žœžœžœ˜'š   œžœ žœžœžœ˜,Kšœžœžœ˜,K™K˜—Kš  œžœ žœžœžœ˜'š   œžœ žœžœžœ˜,Kšœžœžœ˜,K™K˜—Kš  œžœ žœžœžœ˜'š   œžœ žœžœžœ˜,Kšœžœžœ˜)Kš œΟmœœΟsœœ ™2K˜—Kš  œžœ žœžœžœ˜)š   œžœ žœžœžœ˜.Kšœžœžœ˜)Kšœ$œ’Πem’œ’œœ’œœ ™GK™—Kš  œžœžœžœžœ˜%š   œžœžœžœžœ˜*Kšœžœžœ˜%Kš œ ‘œœ’œœ™K™—š  œžœžœžœžœ˜%Kšœœœ ‘œ™$K™—š  œžœžœžœžœ˜"Kšœ’œœ™—K˜—Kšžœ˜—…—† L