Complex complex number


inherits from: Object : Magnitude : Number


A class representing complex numbers.


Note that this is a simplified representation of a complex number, which does not implement the full mathematical notion of a complex number. 



Creation


new(real, imag)


Create a new complex number with the given real and imaginary parts.

a = Complex(2, 5);

a.real;

a.imag;



Accessing


real

real_(val)

The real part of the number.

imag 

imag_(val)

The imaginary part of the number.


Math


+ aNumber

Complex addition.

Complex(2, 9) + Complex(-6, 2)

- aNumber

Complex subtraction.

Complex(2, 9) - Complex(-6, 2)

* aNumber

Complex multiplication.

Complex(2, 9) * Complex(-6, 2)

/ aNumber

Complex division.

Complex(2, 9) / Complex(-6, 2)

** aNumber

Complex exponentiation (not implemented for all combinations - some are mathematically ambiguous).

Complex(0, 2) ** 6

2.3 ** Complex(0, 2)

Complex(2, 9) ** 1.2 // not defined

exp(aNumber)

Complex exponentiation with base e.

exp(Complex(2, 9))

exp(Complex(0, pi)) == -1 // Euler's formula: true

squared

Complex self multiplication.

squared(Complex(2, 1))

cubed

Complex double self multiplication.

squared(Complex(2, 1))

< aNumber

Answer the comparison of just the real parts.

Complex(2, 9) < Complex(5, 1);

== aNumber

Answer the comparison assuming that the reals (floats) are fully embedded in the complex numbers 

Complex(1, 0) == 1;

Complex(1, 5) == Complex(1, 5);

neg

Negation of both parts.

Complex(2, 9).neg

abs

The absoulte value of a complex number is its magnitude.

Complex(3, 4).abs

conjugate

Answer the complex conjugate.

Complex(2, 9).conjugate



Conversion


magnitude

Answer the distance to the origin.

rho

Answer the distance to the origin.

angle

Answer the angle in radians.

phase

Answer the angle in radians.

theta

Answer the angle in radians.

asPoint

Convert to a Point.

asPolar

Convert to a Polar

asInteger

Answer real part as Integer.

asFloat

Answer real part as Float.




// example


a = Complex(0, 1);

a * a; // returns Complex(-1, 0);


// julia set approximation

f = { |z| z * z + Complex(0.70176, 0.3842) };


(

var n = 80, xs = 400, ys = 400, dx = xs / n, dy = ys / n, zoom = 3, offset = -0.5;

var field = { |x| { |y| Complex(x / n + offset * zoom, y / n + offset * zoom) } ! n } ! n;

w = Window("Julia set", bounds:Rect(200, 200, xs, ys)).front;

w.view.background_(Color.black);

w.drawHook = {

n.do { |x|

n.do { |y|

var z = field[x][y];

z = f.(z);

field[x][y] = z;

Pen.color = Color.gray(z.rho.linlin(-100, 100, 1, 0));

 

Pen.addRect(

Rect(x * dx, y * dy, dx, dy)

);

Pen.fill

}

}

};

fork({ 6.do { w.refresh; 2.wait } }, AppClock)

)