The piece of computer art that I chose to recreate is this:
The result is this:
Below is the code to my recreation. It creates different result every time it is executed because which of the lines out of the 8 options are drawn are randomly chosen. I spent a lot of time trying to make the code as efficient as possible.:
float rectSize; float gapSize; int numRect = 17; void setup(){ size(720, 720); background(0); rectSize = width / 26.0; gapSize = rectSize / 2.0; rectMode(CORNER); noFill(); stroke(255); drawRect(); } void draw(){ } void drawRect(){ float x_pos = gapSize; float y_pos = gapSize; for(int i = 0; i < numRect; i++){ for(int j = 0; j < numRect; j++){ rect(x_pos, y_pos, rectSize, rectSize); whichLines(i, j, x_pos, y_pos); x_pos += (rectSize + gapSize); } x_pos = gapSize; y_pos += (rectSize + gapSize); } } void whichLines(int i, int j, float x_pos, float y_pos){ int numLines = 0; if(i == 0 | j == 0| i == 16 | j == 16){ numLines = 8; } else if(i == 1 | j == 1 | i == 15 | j == 15){ numLines = 7; } else if(i == 2 | j == 2 | i == 14 | j == 14){ numLines = 6; } else if(i == 3 | j == 3 | i == 13 | j == 13){ numLines = 5; } else if(i == 4 | j == 4 | i == 12 | j == 12){ numLines = 4; } else if(i == 5 | j == 5 | i == 11 | j == 11){ numLines = 3; } else if(i == 6 | j == 6 | i == 10 | j == 10){ numLines = 2; } else if(i == 7 | j == 7 | i == 9 | j == 9){ numLines = 1; } else if(i == 8 && j == 8){ numLines = 0; } drawLines(numLines, x_pos, y_pos); } void drawLines(int numLines, float x_pos, float y_pos){ if(numLines == 0){ return; } else if(numLines == 8){ for(int i = 1; i < 9; i++){ drawLine(i, x_pos, y_pos); } } else if(numLines == 7){ int randNum = int(random(1, 9)); for(int i = 1; i < 9; i++){ if(i != randNum){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 6){ int randNum1 = int(random(1, 9)); int randNum2 = int(random(1, 9)); while(randNum1 == randNum2){ randNum2 = int(random(1, 9)); } for(int i = 1; i < 9; i++){ if( i != randNum1 && i != randNum2){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 5){ int randNum1 = int(random(1, 9)); int randNum2 = int(random(1, 9)); while(randNum1 == randNum2){ randNum2 = int(random(1, 9)); } int randNum3 = int(random(1, 9)); while(randNum3 == randNum1 || randNum3 == randNum2){ randNum3 = int(random(1, 9)); } for(int i = 1; i < 9; i++){ if( i != randNum1 && i != randNum2 && i != randNum3){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 4){ int randNum1 = int(random(1, 9)); int randNum2 = int(random(1, 9)); while(randNum1 == randNum2){ randNum2 = int(random(1, 9)); } int randNum3 = int(random(1, 9)); while(randNum3 == randNum1 || randNum3 == randNum2){ randNum3 = int(random(1, 9)); } int randNum4 = int(random(1, 9)); while(randNum4 == randNum1 || randNum4 == randNum2 || randNum4 == randNum3){ randNum4 = int(random(1, 9)); } for(int i = 1; i < 9; i++){ if( i != randNum1 && i != randNum2 && i != randNum3 && i != randNum4){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 3){ int randNum1 = int(random(1, 9)); int randNum2 = int(random(1, 9)); while(randNum1 == randNum2){ randNum2 = int(random(1, 9)); } int randNum3 = int(random(1, 9)); while(randNum3 == randNum1 || randNum3 == randNum2){ randNum3 = int(random(1, 9)); } for(int i = 1; i < 9; i++){ if( i == randNum1 || i == randNum2 || i == randNum3){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 2){ int randNum1 = int(random(1, 9)); int randNum2 = int(random(1, 9)); while(randNum1 == randNum2){ randNum2 = int(random(1, 9)); } for(int i = 1; i < 9; i++){ if( i == randNum1 || i == randNum2){ drawLine(i, x_pos, y_pos); } } } else if(numLines == 1){ int randNum1 = int(random(1, 9)); drawLine(randNum1, x_pos, y_pos); } } void drawLine(int whichLine, float x_pos, float y_pos){ if(whichLine == 1){ //vertical line line(x_pos + gapSize, y_pos, x_pos + gapSize, y_pos + rectSize); } else if(whichLine == 2){ //horizontal line line(x_pos, y_pos + gapSize, x_pos + rectSize, y_pos + gapSize); } else if(whichLine == 3){ //left diagonal line(x_pos, y_pos, x_pos + rectSize, y_pos + rectSize); } else if(whichLine == 4){ //right diagonal line(x_pos + rectSize, y_pos, x_pos, y_pos + rectSize); } else if(whichLine == 5){ //small diagonal 1 line(x_pos + gapSize, y_pos, x_pos, y_pos + gapSize); } else if(whichLine == 6){ line(x_pos, y_pos + gapSize, x_pos + gapSize, y_pos + rectSize); } else if(whichLine == 7){ line(x_pos + gapSize, y_pos + rectSize, x_pos + rectSize, y_pos + gapSize); } else if(whichLine == 8){ line(x_pos + rectSize, y_pos + gapSize, x_pos + gapSize, y_pos); } }