public IEnumerable<IterateSinglePointResult> Create(FractalParameters parameters) { for (double real = parameters.Area.MinX; real < parameters.Area.MaxX; real += parameters.Delta) { for (double imaginary = parameters.Area.MinY; imaginary < parameters.Area.MaxY; imaginary += parameters.Delta) { var result = this.CreateSinglePoint( new Complex(real, imaginary), parameters.Parameter, parameters.MaxIterations, parameters.MaxMagnitude); if (result.HasValue) { yield return result.Value; } } } }
public IEnumerable<IterateSinglePointResult> CreateInParallel(FractalParameters parameters) { var bag = new ConcurrentBag<IterateSinglePointResult>(); Parallel.ForEach(Range(parameters.Area.MinX, parameters.Area.MaxX, parameters.Delta), real => { for (double imaginary = parameters.Area.MinY; imaginary < parameters.Area.MaxY; imaginary += parameters.Delta) { var point = this.CreateSinglePoint( new Complex(real, imaginary), parameters.Parameter, parameters.MaxIterations, parameters.MaxMagnitude); if (point.HasValue) { bag.Add(point.Value); } } }); return bag; }