This commit is contained in:
nik
2026-05-20 16:20:45 -07:00
commit 007710b5a8
91 changed files with 450401 additions and 0 deletions

View File

@@ -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;
}
}
}