each point a color . Additionally or alternatively the colors may be dependent on the distance , which is defined to be the first value such that for some previously fixed small . Generalization of Newton fractals A generalization of Newton's iteration is where is any complex number. The special choice corresponds to the Newton fractal. The fixed points of this map are stable when lies inside the disk of radius 1 centered at 1. When is outside this disk, the fixed points are locally unstable, however the map still exhibits a fractal structure in the sense of Julia set. If is a polynomial of degree , then the sequence is bounded provided that is inside a disk of radius centered at . More generally, Newton's fractal is a special case of a Julia set. Serie : Other fractals where potential and trigonometric functions are multiplied. Nova fractal The Nova fractal invented in the mid 1990s by Paul Derbyshire, is a generalization of the Newton fractal with the addition of a value at each step: The "Julia" variant of the Nova fractal keeps constant over the image and initializes to the pixel coordinates. The "Mandelbrot" variant of the Nova fractal initializes to the pixel coordinates and sets to a critical point, where Commonly-used polynomials like or lead to a critical point at . Implementation In order to implement the Newton fractal, it is necessary to have a starting function as well as its derivative function: The three roots of the function are The above-defined functions can be translated in pseudocode as follows: //z^3-1 float2 Function (float2 z) { return cpow(z, 3) - float2(1, 0); //cpow is an exponential function for complex numbers } //3*z^2 float2 Derivative (float2 z) { return 3 * cmul(z, z); //cmul is a function that handles multiplication of complex numbers } It is now just a matter of implementing the Newton method using the given functions. float2 roots[3] = //Roots (solutions) of the polynomial { float2(1, 0), float2(-.5, sqrt(3)/2), float2(-.5, -sqrt(3)/2) }; color colors[3] = //Assign a color for each root { red, green, blue } For each pixel (x, y) on the target, do: { zx = scaled x coordinate of pixel (scaled to lie in the Mandelbrot X scale (-2.5, 1)) zy = scaled y coordinate of pixel (scaled to lie in the Mandelbrot Y scale (-2, 1)) float2 z = float2(zx, zy); //z