DIRECTORY Real USING [SqRt], Vector3 USING [VEC]; Vector3Impl: CEDAR PROGRAM IMPORTS Real EXPORTS Vector3 ~ BEGIN VEC: TYPE ~ Vector3.VEC; Add: PUBLIC PROC[v1, v2: VEC] RETURNS[VEC] ~ { RETURN[[v1.x+v2.x, v1.y+v2.y, v1.z+v2.z]] }; Sub: PUBLIC PROC[v1, v2: VEC] RETURNS[VEC] ~ { RETURN[[v1.x-v2.x, v1.y-v2.y, v1.z-v2.z]] }; Neg: PUBLIC PROC[v: VEC] RETURNS[VEC] ~ { RETURN[[-v.x, -v.y, -v.z]] }; Mul: PUBLIC PROC[v: VEC, s: REAL] RETURNS[VEC] ~ { RETURN[[v.x*s, v.y*s, v.z*s]] }; Div: PUBLIC PROC[v: VEC, s: REAL] RETURNS[VEC] ~ { RETURN[[v.x/s, v.y/s, v.z/s]] }; Square: PUBLIC PROC[v: VEC] RETURNS[REAL] ~ { RETURN[v.x*v.x+v.y*v.y+v.z*v.z] }; Length: PUBLIC PROC[v: VEC] RETURNS[REAL] ~ { RETURN[Real.SqRt[v.x*v.x+v.y*v.y+v.z*v.z]] }; Unit: PUBLIC PROC[v: VEC] RETURNS[VEC] ~ { m: REAL ~ Real.SqRt[v.x*v.x+v.y*v.y+v.z*v.z]; RETURN[[v.x/m, v.y/m, v.z/m]] }; Dot: PUBLIC PROC[v1, v2: VEC] RETURNS[REAL] ~ { RETURN[v1.x*v2.x+v1.y*v2.y+v1.z*v2.z] }; Cross: PUBLIC PROC[v1, v2: VEC] RETURNS[VEC] ~ { RETURN[[v1.y*v2.z-v1.z*v2.y, v1.z*v2.x-v1.x*v2.z, v1.x*v2.y-v1.y*v2.x]] }; END. €Vector3Impl.mesa Copyright c 1984, Xerox Corporation. All rights reserved. Doug Wyatt, August 15, 1984 5:42:22 pm PDT ÊX˜šœ™Jšœ Ïmœ/™:Jšœ*™*J™—šÏk ˜ Jšœžœ˜Jšœžœžœ˜J˜—Jšœ žœž˜Jšžœ˜ Jšžœ˜Jšœž˜J˜Jšžœžœ žœ˜J˜š Ïnœžœžœ žœžœžœ˜.Jšžœ&˜,J˜—š Ÿœžœžœ žœžœžœ˜.Jšžœ&˜,J˜—š Ÿœžœžœžœžœžœ˜)Jšžœ˜J˜—šŸœžœžœžœžœžœžœ˜2Jšžœ˜ J˜—šŸœžœžœžœžœžœžœ˜2Jšžœ˜ J˜—š Ÿœžœžœžœžœžœ˜-Jšžœ˜"J™—š Ÿœžœžœžœžœžœ˜-Jšžœ'˜-J™—š Ÿœžœžœžœžœžœ˜*Jšœžœ'žœ˜NJ˜—š Ÿœžœžœ žœžœžœ˜/Jšžœ"˜(J˜—š Ÿœžœžœ žœžœžœ˜0JšžœD˜JJ˜—Jšžœ˜—…—@