Vector2.mesa
Michael Plass, August 4, 1982 11:58 am
Doug Wyatt, July 3, 1984 12:24:50 pm PDT
DIRECTORY
Real USING [SqRt];
Vector2: CEDAR DEFINITIONS
IMPORTS Real
~ BEGIN
VEC: TYPE ~ RECORD[x, y: REAL];
Add: PROC[a, b: VEC] RETURNS[VEC];
InlineAdd:
PROC[a, b:
VEC]
RETURNS[
VEC] ~
INLINE {
RETURN[[a.x+b.x, a.y+b.y]] };
Vector sum, a+b.
Sub: PROC[a, b: VEC] RETURNS[VEC];
InlineSub:
PROC[a, b:
VEC]
RETURNS[
VEC] ~
INLINE {
RETURN[[a.x-b.x, a.y-b.y]] };
Vector difference, a-b.
Neg: PROC[a: VEC] RETURNS[VEC];
InlineNeg:
PROC[a:
VEC]
RETURNS[
VEC] ~
INLINE {
RETURN[[-a.x, -a.y]] };
Vector complement, -a.
Mul: PROC[a: VEC, s: REAL] RETURNS[VEC];
InlineMul:
PROC[a:
VEC, s:
REAL]
RETURNS[
VEC] ~
INLINE {
RETURN[[a.x*s, a.y*s]] };
Product of vector a and scalar s.
Div: PROC[a: VEC, s: REAL] RETURNS[VEC];
InlineDiv:
PROC[a:
VEC, s:
REAL]
RETURNS[
VEC] ~
INLINE {
RETURN[[a.x/s, a.y/s]] };
Equivalent to Mul[a, 1/s].
SqrMag: PROC[a: VEC] RETURNS[REAL];
InlineSqrMag:
PROC[a:
VEC]
RETURNS[
REAL] ~
INLINE {
RETURN[a.x*a.x+a.y*a.y] };
Square of the magnitude of a.
Mag: PROC[a: VEC] RETURNS[REAL];
InlineMag:
PROC[a:
VEC]
RETURNS[
REAL] ~
INLINE {
RETURN[Real.SqRt[a.x*a.x+a.y*a.y]] };
Magnitude of a.
Dot: PROC[a, b: VEC] RETURNS[REAL];
InlineDot:
PROC[a, b:
VEC]
RETURNS[
REAL] ~
INLINE {
RETURN[a.x*b.x+a.y*b.y] };
Dot (inner) product of a and b.
Cross: PROC[a, b: VEC] RETURNS[REAL];
InlineCross:
PROC[a, b:
VEC]
RETURNS[
REAL] ~
INLINE {
RETURN[a.x*b.y-a.y*b.x] };
Magnitude of the cross (outer) product of a and b.
Unit: PROC[a: VEC] RETURNS[VEC];
InlineUnit:
PROC[a:
VEC]
RETURNS[
VEC] ~
INLINE {
RETURN[InlineDiv[a, InlineMag[a]]] };
Unit vector in the direction of a.
Normal: PROC[a: VEC] RETURNS[VEC];
InlineNormal:
PROC[a:
VEC]
RETURNS[
VEC] ~
INLINE {
RETURN[[-a.y, a.x]] };
Vector normal to a.
END.