static void DrawAsciiMandelbrotSet(double x1, double y1, double x2, double y2, double xd, double yd) { var mandelbrotSolver = new MandelbrotSolver(); Func<Complex, bool> solver = x => mandelbrotSolver.IsMemberIterative(x).IsMember; for (var y = y1; y >= y2; y -= yd) { for (var x = x1; x <= x2; x += xd) { var c = new Complex(x, y); var outputChar = solver(c) ? "#" : "."; Console.Write(outputChar); } Console.WriteLine(); } }
private ImageSource DrawMandelbrot(Rect area) { var pixelHeight = (int)MandelbrotImage.Height; var pixelWidth = (int)MandelbrotImage.Width; var bitmap = new WriteableBitmap(pixelWidth, pixelHeight, 96, 96, PixelFormats.Bgra32, null); var bytesPerPixel = bitmap.Format.BitsPerPixel / 8; var pixels = new byte[pixelHeight * pixelWidth * bytesPerPixel]; var stride = pixelWidth * bytesPerPixel; var xScale = (area.Right - area.Left) / pixelWidth; var yScale = (area.Top - area.Bottom) / pixelHeight; var mandelbrotSolver = new MandelbrotSolver(maxIterations: 50); var pixelIndices = Enumerable.Range(0, pixels.Length).Where(i => i % 4 == 0); Parallel.ForEach(pixelIndices, i => { var yPixel = i / stride; var xPixel = i % stride / bytesPerPixel; var xCoord = area.Left + xPixel * xScale; var yCoord = area.Top - yPixel * yScale; var c = new Complex(xCoord, yCoord); var mandelbrotResult = mandelbrotSolver.IsMemberIterative(c); var colour = IterationColour(mandelbrotResult.Iterations); pixels[i] = colour.B; pixels[i + 1] = colour.G; pixels[i + 2] = colour.R; pixels[i + 3] = colour.A; }); var sourceRect = new Int32Rect(0, 0, pixelWidth, pixelHeight); bitmap.WritePixels(sourceRect, pixels, stride, 0); return bitmap; }