QcPenPrinter: no need to allocate QPrintDialog on heap
[supercollider.git] / HelpSource / Classes / Complex.schelp
blob811946bd2593bb4fbe1baee7a5ba112f35dff447
1 CLASS:: Complex
2 summary:: complex number
3 categories:: Math
4 related::Classes/Polar, Classes/SimpleNumber, Classes/Float, Classes/Integer
6 DESCRIPTION::
7 A class representing complex numbers.
8 Note that this is a simplified representation of a complex number, which does not implement the full mathematical notion of a complex number.
10 CLASSMETHODS::
11 method:: new
12 Create a new complex number with the given real and imaginary parts.
13 argument:: real
14 the real part
15 argument:: imag
16 the imaginary part
18 returns:: a new instance of Complex.
19 discussion::
20 code::
21 a = Complex(2, 5);
22 a.real;
23 a.imag;
26 INSTANCEMETHODS::
28 subsection:: math support
29 method:: real
30 The real part of the number.
32 method:: imag
33 The imaginary part of the number.
35 method:: conjugate
36 the complex conjugate.
37 discussion::
38 code::
39 Complex(2, 9).conjugate
42 method:: +
43 Complex addition.
44 discussion::
45 code::
46 Complex(2, 9) + Complex(-6, 2)
49 method:: -
50 Complex subtraction
51 discussion::
52 code::
53 Complex(2, 9) - Complex(-6, 2)
56 method:: *
57 Complex multiplication
58 discussion::
59 code::
60 Complex(2, 9) * Complex(-6, 2)
63 method:: /
64 Complex division.
65 discussion::
66 code::
67 Complex(2, 9) / Complex(-6, 2)
70 method:: exp
71 Complex exponentiation with base e.
72 discussion::
73 code::
74 exp(Complex(2, 9))
76 code::
77 exp(Complex(0, pi)) == -1 // Euler's formula: true
80 method:: squared
81 Complex self multiplication.
82 discussion::
83 code::
84 squared(Complex(2, 1))
87 method:: cubed
88 complex triple self multiplication.
89 discussion::
90 code::
91 cubed(Complex(2, 1))
94 method:: **, pow
95 Complex exponentiation
96 discussion::
97 not implemented for all combinations - some are mathematically ambiguous.
98 code::
99 Complex(0, 2) ** 6
101 code::
102 2.3 ** Complex(0, 2)
104 code::
105 Complex(2, 9) ** 1.2 // not defined
109 method:: <
110 the comparison of just the real parts.
111 discussion::
112 code::
113 Complex(2, 9) < Complex(5, 1);
116 method:: ==
117 the comparison assuming that the reals (floats) are fully embedded in the complex numbers
118 discussion::
119 code::
120 Complex(1, 0) == 1;
121 Complex(1, 5) == Complex(1, 5);
124 method:: neg
125 negation of both parts
126 discussion::
127 code::
128 Complex(2, 9).neg
131 method:: abs
132 the absoulte value of a complex number is its magnitude.
133 discussion::
134 code::
135 Complex(3, 4).abs
138 method:: magnitude
139 distance to the origin.
141 method:: magnitudeApx
143 method:: rho
144 the distance to the origin.
146 method:: angle, phase, theta
147 the angle in radians.
150 subsection:: conversion
151 method:: asPoint
152 Convert to a link::Classes/Point::.
154 method:: asPolar
155 Convert to a Polar
157 method:: asInteger
158 real part as link::Classes/Integer::.
160 method:: asFloat
161 real part as link::Classes/Float::.
163 method:: asComplex
164 returns this
167 subsection:: misc
168 method:: coerce
169 method:: hash
170 a hash value
171 method:: printOn
172 print this on given stream
173 method:: performBinaryOpOnSignal
174 method:: performBinaryOpOnComplex
175 method:: performBinaryOpOnSimpleNumber
176 method:: performBinaryOpOnUGen
181 EXAMPLES::
183 Basic example:
184 code::
185 a = Complex(0, 1);
186 a * a; // returns Complex(-1, 0);
189 Julia set approximation:
190 code::
191 f = { |z| z * z + Complex(0.70176, 0.3842) };
194 var n = 80, xs = 400, ys = 400, dx = xs / n, dy = ys / n, zoom = 3, offset = -0.5;
195 var field = { |x| { |y| Complex(x / n + offset * zoom, y / n + offset * zoom) } ! n } ! n;
197 w = Window("Julia set", bounds:Rect(200, 200, xs, ys)).front;
198 w.view.background_(Color.black);
199 w.drawHook = {
200         n.do { |x|
201                 n.do { |y|
202                         var z = field[x][y];
203                         z = f.(z);
204                         field[x][y] = z;
205                         Pen.color = Color.gray(z.rho.linlin(-100, 100, 1, 0));
206                         Pen.addRect(
207                                 Rect(x * dx, y * dy, dx, dy)
208                         );
209                         Pen.fill
210                 }
211         }
214 fork({ 6.do { w.refresh; 2.wait } }, AppClock)