/* * Copyright (c) 2015 Camil Staps */ package com.camilstaps.mandelbrot; import fractals.Grid; import fractals.Mandelbrot; /** * * @author camilstaps */ public class MandelbrotController { private final MandelbrotProvider mandelbrotProvider; private final Grid grid; public MandelbrotController(MandelbrotProvider mp, Grid grid) { mandelbrotProvider = mp; this.grid = grid; } public void redraw() { double centerX = mandelbrotProvider.getCenterX(); double centerY = mandelbrotProvider.getCenterY(); double scale = mandelbrotProvider.getScale(); int repetitions = mandelbrotProvider.getRepetitions(); int grid_w = grid.getWidth(), grid_h = grid.getHeight(); double min_x = centerX - grid_w / scale / 2, max_x = centerX + grid_w / scale / 2, min_y = centerY - grid_h / scale / 2, max_y = centerX + grid_h / scale / 2; for (float i = 0; i < grid_w; i++) { for (float j = 0; j < grid_h; j++) { int grayscale = Mandelbrot.mandelNumber( min_x + (i / grid_w) * (max_x - min_x), min_y + (j / grid_h) * (max_y - min_y), repetitions ) * 255 / repetitions; int[] color = {grayscale, grayscale, grayscale}; grid.setPixel((int) i, (int) j, color); } } } public interface MandelbrotProvider { public double getCenterX(); public double getCenterY(); public double getScale(); public int getRepetitions(); } }