public void Iterate(int iterations = 10) { //calculate viewport so, on zoom 1, shown rectangle is in [(-2,-2)..(2,2)] var zoom_ratio = 4 / (double)Math.Min(PlaneWidth, PlaneHeight) / Zoom; var o_prime = VectorFlyWeight.GetVector( Center.X - (PlaneWidth / 2) * zoom_ratio, Center.Y - (PlaneHeight / 2) * zoom_ratio ); Parallel.For(0, PlaneWidth, new ParallelOptions() { MaxDegreeOfParallelism = 3 }, i => { for (var y = 0; y < PlaneHeight; y++) { var result = new Zeta( new Point(i, y), VectorFlyWeight.GetVector( i * zoom_ratio + o_prime.X, y * zoom_ratio + o_prime.Y )); Zetas[i, y] = result; result.ZSquaredPlusC(iterations); } }); IterationsDone = iterations; }
public Vector2d ImageSpaceToZetaSpace(int x, int y) { var zoom_ratio = 4 / (double)Math.Min(PlaneWidth, PlaneHeight) / Zoom; return(VectorFlyWeight.GetVector( Center.X - (PlaneWidth / 2 - x) * zoom_ratio, Center.Y - (PlaneHeight / 2 - y) * zoom_ratio )); }
public Mandelbrot(int width, int height, double zoom = 1, Vector2d center = null ) { PlaneWidth = width; PlaneHeight = height; Zoom = zoom; Center = (center ?? VectorFlyWeight.GetVector()); Zetas = new Zeta[width, height]; }