diff options
| author | pants <niklasjo2004@gmail.com> | 2026-09-21 14:16:34 -0700 |
|---|---|---|
| committer | pants <niklasjo2004@gmail.com> | 2026-09-21 14:16:34 -0700 |
| commit | 81ba9eb66f8284d8760012973f84cdbe617ceb94 (patch) | |
| tree | 466432644e9e3fd66ee183ec53a1f10abb1b7faa /c2/divide_canvas/Client.java | |
Diffstat (limited to 'c2/divide_canvas/Client.java')
| -rw-r--r-- | c2/divide_canvas/Client.java | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/c2/divide_canvas/Client.java b/c2/divide_canvas/Client.java new file mode 100644 index 0000000..8ed3828 --- /dev/null +++ b/c2/divide_canvas/Client.java @@ -0,0 +1,83 @@ +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; + } + } +} + |
