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]] }; Equal: PROC [v1, v2: VEC] RETURNS [BOOL]; InlineEqual: PROC [v1, v2: VEC] RETURNS [BOOL] ~ INLINE { RETURN[v1.x=v2.x AND v1.y=v2.y] }; 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. TVector2.mesa Copyright c 1985, 1986 by Xerox Corporation. All rights reserved. Doug Wyatt, January 20, 1986 2:03:46 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. Exact equality test. 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œ7™BKšœ+™+—K™KšœΟkœF™QK™KšΠblœžœž ˜Kšœž˜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š  œžœ žœžœžœ˜'š   œžœ žœžœžœ˜,Kšœžœžœ˜,K™K˜—Kš  œžœ žœžœžœ˜'š   œžœ žœžœžœ˜,Kšœžœžœ˜)Kšœœ™2K˜—Kš  œžœ žœžœžœ˜)š   œžœ žœžœžœ˜.Kšœžœžœ˜)Kšœ'œ™CK™—K˜Kš  œžœžœžœžœ˜%š   œžœžœžœžœ˜*Kšœžœžœ˜%Kšœ œ ™K™—š  œžœžœžœžœ˜%Kšœ œ™$K™—š  œžœžœžœžœ˜"Kšœ™K™—K˜Kšžœ˜—…— 