Exemplo n.º 1
0
 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);
 }
Exemplo n.º 2
0
 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));
 }
Exemplo n.º 3
0
        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);
        }