Ejemplo n.º 1
0
        private void Draw(FractalTask t)
        {
            System.Diagnostics.Debug.WriteLine(Thread.CurrentThread.Name + ": Drawing");

            var colorBuffer = new byte[3];


            for (var y = 0; y < t.Height; y++)
            {
                for (var x = 0; x < t.Width; x++)
                {
                    var currentPos = 4 * ((int)t.UpperLeftCorner.X + x +
                                          ((int)t.UpperLeftCorner.Y + y) * _pixelWidth);

                    if (_colorMapper != null)
                    {
                        _colorMapper.MapColor(Convert.ToInt32(t.GetIterations(x, y)), _maxIterations,
                                              Math.Abs(Convert.ToDouble(t.GetImaginaryPart(y))),
                                              Math.Abs(Convert.ToDouble(t.GetRealPart(x))), ref colorBuffer);
                    }
                    else
                    {
                        _defaultColorMapper.MapColor(Convert.ToInt32(t.GetIterations(x, y)), _maxIterations,
                                                     Math.Abs(Convert.ToDouble(t.GetImaginaryPart(y))),
                                                     Math.Abs(Convert.ToDouble(t.GetRealPart(x))), ref colorBuffer);
                    }
                    _pixelValues[currentPos]     = colorBuffer[2];
                    _pixelValues[currentPos + 1] = colorBuffer[1];
                    _pixelValues[currentPos + 2] = colorBuffer[0];
                    _pixelValues[currentPos + 3] = 255;
                }
            }
            if (_stopRendering)
            {
                return;
            }

            _previousDrawnTasks.Enqueue(t);
            OnTileAvailable(new EventArgs());
        }
Ejemplo n.º 2
0
        //  public double[][,] calculate(int resultX = 1920, int resultY = 1080, int maxIterations = 1000, Image img = null)

        private void InternalCalculate(FractalTask t)
        {
            System.Diagnostics.Debug.WriteLine(Thread.CurrentThread.Name + ": Calculating");
            for (var y = 0; y < t.Height; y++)
            {
                var cIm = t.GetImaginaryPart(y);

                for (var x = 0; x < t.Width; x++)
                {
                    var     cReal = t.GetRealPart(x);
                    decimal zReal = 0;
                    decimal zIm   = 0;
                    decimal zAbs  = 0;
                    var     n     = 0;

                    while (zAbs <= 4 && n <= t.MaxIterations)
                    {
                        var tmp = zReal;
                        zReal = zReal * zReal - zIm * zIm + cReal;
                        zIm   = 2 * tmp * zIm + cIm;
                        zAbs  = zReal * zReal + zIm * zIm;
                        n++;
                    }
                    if (_stopRendering)
                    {
                        return;
                    }

                    t.SetIterations(x, y, n);
                }
            }

            t.Type = TaskType.Draw;
            if (!_stopRendering)
            {
                _drawingTasks.Enqueue(t);
            }
        }