import java.awt.*; public class Client { public static void main(String[] args) { // 1. Create a new picture sized 400 x 400 pixels // 2. Call divide divide canvas // 3. Save the image to display it Picture pic = new Picture(500,500); divideCanvas(pic, 4); pic.save("boner.jpg"); } public static void divideCanvas(Picture p, int n) { Color[][] pixels = p.getPixels(); divideCanvas(p, pixels, n, new Point(0, 0), new Point(p.width() - 1, p.height() - 1)); p.setPixels(pixels); } private static void divideCanvas(Picture p, Color[][] pixels, int n, Point one, Point two) { // extract coordinates from points int x1 = one.x; int x2 = two.x; int y1 = one.y; int y2 = two.y; // make useful boundary points Point topLeft = new Point(x1, y1); Point topMiddle = new Point((x1 + x2) / 2, y1); // Point topRight = new Point(x2,y1); Point middleLeft = new Point(x1, (y1 + y2) / 2); Point middleMiddle = new Point(topMiddle.x, middleLeft.y); Point middleRight = new Point(x2, middleLeft.y); // Point bottomLeft = new Point(x1,y2); Point bottomMiddle = new Point(topMiddle.x, y2); Point bottomRight = new Point(x2, y2); // if we are actually dividing, do this if (n != 0) { // System.out.println(topLeft); // System.out.println(topMiddle); // System.out.println(middleLeft); // System.out.println(middleMiddle); // System.out.println(middleRight); // System.out.println(bottomMiddle); // System.out.println(bottomRight); fill(pixels, topLeft.x, middleMiddle.x, topLeft.y, middleMiddle.y); fill(pixels, topMiddle.x, middleRight.x, topMiddle.y, middleRight.y); fill(pixels, middleLeft.x, bottomMiddle.x, middleLeft.y, bottomMiddle.y); fill(pixels, middleMiddle.x, bottomRight.x, middleMiddle.y, bottomRight.y); divideCanvas(p, pixels, n - 1, topLeft, middleMiddle); divideCanvas(p, pixels, n - 1, topMiddle, middleRight); divideCanvas(p, pixels, n - 1, middleLeft, bottomMiddle); divideCanvas(p, pixels, n - 1, middleMiddle, bottomRight); } // otherwise, just draw the border else { fill(pixels,topLeft.x,bottomRight.x,topLeft.y,bottomRight.y); } } public static void fill(Color[][] pixels, int x1, int x2, int y1, int y2) { for (int i = y1 + 1; i <= y2 - 1; i++) { for (int n = x1 + 1; n <= x2-1; n++) { pixels[i][n] = Color.WHITE; } } // outer borders for (int i = y1; i <= y2; i++) { pixels[i][x1] = Color.BLACK; pixels[i][x2] = Color.BLACK; } for (int i = x1; i <= x2; i++) { pixels[y1][i] = Color.BLACK; pixels[y2][i] = Color.BLACK; } } }