private Mandelbrot( int sizeX, int sizeY, MandelFunction mandelFunctionType, Complex power, double escapeRadius, Complex center, double range, Complex zOffset) { ReinitializeMandelbrot( sizeX, sizeY, mandelFunctionType, power, escapeRadius, center, range, zOffset); }
public void ReinitializeMandelbrot( int sizeX = 1000, int sizeY = 1000, MandelFunction mandelFunctionType = MandelFunction.Mandelbrot, double powerReal = 2, double powerImag = 0, double escapeRadius = 2, double centerReal = 0, double centerImag = 0, double range = 2, double zRealOffset = 0, double zImagOffset = 0) { ReinitializeMandelbrot(sizeX, sizeY, mandelFunctionType, new Complex(powerReal, powerImag), escapeRadius, new Complex(centerReal, centerImag), range, new Complex(zRealOffset, zImagOffset)); }
private void ReinitializeMandelbrot( int sizeX, int sizeY, MandelFunction mandelFunctionType, Complex power, double escapeRadius, Complex center, double range, Complex zOffset) { TotalIterations = 0; bool rebuildArray = _cells == null || SizeX != sizeX || SizeY != sizeY; SizeX = sizeX; SizeY = sizeY; EscapeRadius = escapeRadius; EscapeRadius2 = escapeRadius * escapeRadius; if (rebuildArray) { _cells = new MandelbrotCellInfo[SizeX, SizeY]; } Center = center; Range = range; Power = power; ZOffset = zOffset; double minReal, minImag, rRange, iRange, inc, cr, ci; if (SizeX > SizeY) { rRange = Range; iRange = Range * SizeY / SizeX; minReal = Center.Real - rRange; minImag = Center.Imaginary - iRange; inc = 2 * Range / SizeX; } else { rRange = Range * SizeX / SizeY; iRange = Range; minReal = Center.Real - rRange; minImag = Center.Imaginary - iRange; inc = 2 * Range / SizeY; } MinValue = new Complex(minReal, minImag); MaxValue = new Complex(minReal + 2 * rRange - inc, minImag + 2 * iRange - inc); for (int x = 0; x < SizeX; x++) { cr = minReal + x * inc; for (int y = 0; y < SizeY; y++) { ci = minImag + y * inc; _cells[x, y] = new MandelbrotCellInfo { Z = Complex.Zero, C = new Complex(cr, ci), Iterations = 0, IsEscaped = false }; } } MandelFunctionType = mandelFunctionType; if (!_mandelFunctionInfos.TryGetValue(mandelFunctionType, out MandelFunctionInfo info)) { info = _mandelFunctionInfos[MandelFunction.Mandelbrot]; } _iterationFunction = info.IterationFunction; RealPowerGrowth = info.RealPowerGrowth(power.Real); }