public Color[,] Render(Size resolution, Area viewPort) { _log.InfoFormat("Starting to render ({0:N0}x{1:N0})", resolution.Width, resolution.Height); viewPort.LogViewport(); var output = new Color[resolution.Width, resolution.Height]; _log.Debug("Rendering points"); var allPointsWithEscapeTimes = resolution .GetAllPoints() .AsParallel() .WithDegreeOfParallelism(GlobalArguments.DegreesOfParallelism) .Select(p => Tuple.Create(p, PickColor(FindEscapeTime(viewPort.GetNumberFromPoint(resolution, p))))) .AsEnumerable(); foreach (var result in allPointsWithEscapeTimes) { output[result.Item1.X, result.Item1.Y] = result.Item2; } return output; }
public Color[,] Render(Size resolution, Area viewPort) { _log.InfoFormat("Starting to render ({0:N0}x{1:N0})", resolution.Width, resolution.Height); viewPort.LogViewport(); var areasToInclude = GetAreasToInclude(resolution, viewPort).ToArray(); var checkForEdges = areasToInclude.Length > 1; var output = new Color[resolution.Width, resolution.Height]; _log.Debug("Rendering points"); var processedPixels = resolution .GetAllPoints() .AsParallel() .WithDegreeOfParallelism(GlobalArguments.DegreesOfParallelism) .Select(p => PickColorForPoint(p, viewPort, resolution, checkForEdges, areasToInclude)) .AsEnumerable(); foreach (var result in processedPixels) { output[result.Item1.X, result.Item1.Y] = result.Item2; } if (ShouldIncludeGrid) { _log.Debug("Rendering grid"); RenderGrid(resolution, viewPort, output); } _log.Debug("Rendering axis"); RenderAxis(resolution, viewPort, output); return output; }
public List<Complex> FindPoints(Size resolution, Area viewPort) { _log.InfoFormat("Looking for points ({0:N0}x{1:N0})", resolution.Width, resolution.Height); var results = new ConcurrentBag<Complex>(); Parallel.ForEach(resolution.GetAllPoints(), new ParallelOptions { MaxDegreeOfParallelism = GlobalArguments.DegreesOfParallelism }, point => { var number = viewPort.GetNumberFromPoint(resolution, point); if (IsInSet(number)) { results.Add(number); } }); var resultList = results.ToList(); _log.DebugFormat("Found {0:N0} points", resultList.Count); return resultList; }