DIRECTORY RealFns USING [SqRt,Cos,Sin,ArcTan,Exp,Ln], Vector USING [Vec]; Complex: DEFINITIONS IMPORTS RealFns, Vector = BEGIN Vec: TYPE = Vector.Vec; Add: PROCEDURE [a: Vec, b: Vec] RETURNS [Vec] = INLINE {RETURN[[a.x+b.x,a.y+b.y]]}; -- same as vector sum Sub: PROCEDURE [a: Vec, b: Vec] RETURNS [Vec] = INLINE {RETURN[[a.x-b.x,a.y-b.y]]}; -- same as vector difference Neg: PROCEDURE [a: Vec] RETURNS [Vec] = INLINE {RETURN[[-a.x,-a.y]]}; -- same as vector complement Mul: PROCEDURE [a: Vec, b: Vec] RETURNS [Vec] = INLINE {RETURN[[(a.x*b.x - a.y*b.y), (a.x*b.y + a.y*b.x)]]}; -- complex product Div: PROCEDURE [a: Vec, b: Vec] RETURNS [Vec] = INLINE BEGIN d:REAL = b.x*b.x + b.y*b.y; RETURN[[(a.x*b.x + a.y*b.y)/d, (-a.x*b.y + a.y*b.x)/d]] -- complex quotient END; Conjugate: PROCEDURE [a: Vec] RETURNS [Vec] = INLINE {RETURN[[a.x,-a.y]]}; -- complex conjugate AlmostEqual: PROCEDURE [a: Vec, b: Vec, mag:[-126..0] _ -20] RETURNS [BOOLEAN]; FromPolar: PROCEDURE [r: REAL, radians: REAL] RETURNS [Vec] = INLINE {RETURN[[r*RealFns.Cos[radians], r*RealFns.Sin[radians]]]}; Abs: PROCEDURE [a: Vec] RETURNS [REAL] = INLINE {RETURN[RealFns.SqRt[a.x*a.x+a.y*a.y]]}; -- same as Vector.Mag SqrAbs: PROCEDURE [a: Vec] RETURNS [REAL] = INLINE {RETURN[a.x*a.x+a.y*a.y]}; -- good for checking tolerance Arg: PROCEDURE [a: Vec] RETURNS [REAL] = INLINE {RETURN[RealFns.ArcTan[a.y,a.x]]}; Exp: PROCEDURE [a: Vec] RETURNS [Vec] = INLINE {RETURN[FromPolar[RealFns.Exp[a.x], a.y]]}; Ln: PROCEDURE [a: Vec] RETURNS [Vec] = INLINE {RETURN[[RealFns.Ln[Abs[a]],Arg[a]]]}; Sqr: PROCEDURE [a: Vec] RETURNS [Vec] = INLINE {RETURN[[(a.x*a.x - a.y*a.y), (2*a.x*a.y)]]}; -- like Mul[a,a] SqRt: PROCEDURE [a: Vec] RETURNS [Vec]; -- complex square root END. äComplex.mesa Last edited by Michael Plass 29-Sep-81 9:53:26 Written by Michael Plass, 28-Sep-81 Vector operations returns the angle from the x axis to a, in radians. complex exponential function complex natural logarithm ÊƘJšœ ™ Jšœ/™/Jšœ#™#J˜J˜šÏk ˜ Jšœœ˜+Jšœœ˜J˜—Jšœ œœ˜.Jš˜Jšœœ˜J˜Jšœ™J˜šÏnœ œœ ˜6JšœœÏc˜3J˜—šžœ œœ ˜6JšœœŸ˜:J˜—šžœ œ œ ˜.JšœœŸ˜4J˜—šžœ œœ ˜6Jšœœ/Ÿ˜HJ˜—šžœ œœ ˜6Jšœœ˜!Jšœ2Ÿ˜KJšœ˜J˜—šž œ œ œ ˜4JšœœŸ˜+J˜—Jšž œ œ'œœ˜OJ˜š ž œ œœ œœ ˜DJšœœ4˜;J˜—š žœ œ œœ˜/Jšœœ"Ÿ˜>J˜—š žœ œ œœ˜2JšœœŸ˜9J˜—š žœ œ œœ˜/Jšœœ˜"Jšœ3™3J˜—šžœ œ œ ˜.Jšœœ$˜+Jšœ™J˜—šžœ œ œ ˜-Jšœœ˜&Jšœ™J˜—šžœ œ œ ˜.Jšœœ(Ÿ˜?J˜—Jšžœ œ œŸ˜>J˜Jšœ˜—…—Ü †