home *** CD-ROM | disk | FTP | other *** search
-
- {Just for grins, here's a complex number unit I wrote come time back:}
-
- unit complex;
- (*
- polar/rectangular conversions and complex math
- Steve Rogers, ~1993
- *)
-
- {----------------------}
- interface
-
- type
- tComplex=record
- r, { real component }
- x { imaginary component }
- : real;
- end;
-
- procedure r2p(var r,p : tComplex);
- procedure p2r(var p,r : tComplex);
- procedure c_add(var c1,c2,c3 : tComplex);
- procedure c_sub(var c1,c2,c3 : tComplex);
- procedure c_mult(var c1,c2,c3 : tComplex);
- procedure c_div(var c1,c2,c3 : tComplex);
-
- implementation
-
- const
- RADS=0.0174532; { degree to radian conversion constant }
-
- {----------------------}
- procedure r2p(var r,p : tComplex);
- { returns polar in degrees in p, given rectangular in r }
- begin
- p.r:= sqrt(sqr(r.r)+sqr(r.x));
- p.x:= arctan(r.x/r.r)/RADS;
- end;
-
- {----------------------}
- procedure p2r(var p,r : tComplex);
- { returns rectangular in r, given polar in degrees in p }
- begin
- r.r:= p.r*cos(p.x*RADS);
- r.x:= p.r*sin(p.x*RADS);
- end;
-
- {----------------------}
- procedure c_add(var c1,c2,c3 : tComplex);
- { adds c2 to c1, places result in c3 }
- begin
- c3.r:= c1.r+c2.r;
- c3.x:= c1.x+c2.x;
- end;
-
- {----------------------}
- procedure c_sub(var c1,c2,c3 : tComplex);
- { subtracts c2 from c1, places result in c3 }
- begin
- c3.r:= c1.r-c2.r;
- c3.x:= c1.x-c2.x;
- end;
-
- {----------------------}
- procedure c_mult(var c1,c2,c3 : tComplex);
- { multiplies c1 by c2, places result in c3 }
- begin
- c3.r:= (c1.r*c2.r)-(c1.x*c2.x);
- c3.x:= (c1.r*c2.x)+(c1.x*c2.r);
- end;
-
- {----------------------}
- procedure c_div(var c1,c2,c3 : tComplex);
- { divides c1 by c2, places result in c3 }
- var
- p1,p2,p3 : tComplex;
-
- begin
- r2p(c1,p1); { convert c1 to polar form }
- r2p(c2,p2); { convert c2 to polar form }
- p3.r:= p1.r/p2.r; { divide real component }
- p3.x:= p1.x-p2.x; { subtract imaginary component }
- if (p3.x<0) then p3.x:= p3.x+180; { Pretty it up }
- p2r(p3,c3); { convert c3 back to rectangular }
- end;