var colorFill;
var pictures = []; //empty picture array
var next = 0;
var maxX;
function setup() {
createCanvas(480, 480);
frameRate(100);
//background fill
colorFill = random(150, 255);
//implement pictures in empty array, also check to make sure they are not within the boundary of another picture
for (var i = 0; i < 10; i++) {
var done = false;
var px = next + random(10, 50);
var b = random(50, 150);
next = px + b
maxX = next
pictures[i] = makePicture(px, b)
}
}
function draw() {
background(colorFill);
updateAndDisplayPictures();
removePictures();
addNewPictures();
makeBorder();
}
function updateAndDisplayPictures() {
//detect border of pictures
maxX = 0
for (var i = 0; i < pictures.length; i++) {
pictures[i].move();
pictures[i].display();
}
}
function removePictures() {
var picturesToKeep = [];
for (var i = 0; i < pictures.length; i++) {
if (pictures[i].x + pictures[i].breadth > 0) {
picturesToKeep.push(pictures[i]);
}
}
pictures = picturesToKeep;
}
function addNewPictures() {
var newPicturesProb = 0.01;
//set breadth of image, detect border of picture
var b = random(50, 150);
if (random(0, 1) < newPicturesProb) {
if (maxX < width) {
pictures.push(makePicture(width, b));
}
}
}
function pictureMove() {
this.x += this.speed;
}
function pictureDisplay() {
stroke(153, 76, 0);
push();
//random frame size
strokeWeight(this.frame);
//random picture background
fill(this.fill);
//move frames across canvas
translate(this.x, height - 150);
//create frames
rect(0, -this.place, this.breadth, this.height);
//give object in picture color
if (this.typeColor < 1) {
fill('red');
}
if (this.typeColor > 1 & this.typeColor < 2) {
fill('blue');
}
if (this.typeColor > 2 & this.typeColor < 3) {
fill('yellow');
}
//select object shape
if (this.type == 0) {
noStroke();
ellipse(this.breadth/2, -this.place + this.height/2, this.breadth/4, this.height/4)
}
if (this.type == 1) {
noStroke();
rectMode(CENTER);
rect(this.breadth/2, -this.place + this.height/2, this.breadth/4, this.height/4)
}
if (this.type == 2) {
noStroke();
triangle(this.breadth/2, -this.place + this.height/2, this.breadth/2 + this.breadth/4, -this.place + this.height/2 + this.height/4, this.breadth/2 - this.breadth/4, -this.place + this.height/2 + this.height/4)
}
pop();
//check to make sure picture is not overlapping with another
if (this.x + this.breadth > maxX) {
maxX = this.x + this.breadth
}
}
//create picture object
function makePicture(px, b) {
var pictures = {x: px, move: pictureMove, display: pictureDisplay, speed: -1, breadth: b, height: random(50, 150), place: random(50, 250), frame: random(3, 10), fill: random(50, 255), type: int(random(0, 3)), typeColor: random(0, 3)}
return pictures;
}
//create borders at top and bottom of screen to imitate baseboards
function makeBorder() {
noStroke();
fill(255 - colorFill);
rect(0, 0, width, 20);
rect(0, height - 20, width, 20);
}
For this project, I was inspired by a museum gallery wall where you walk through a room of framed paintings, photographs, etc. and it creates a landscape of art.
I used this sketch to begin my project. I wanted to randomize the size of the art, the size of the frame, and the colors of the wall, border, and painting. Adding in the small abstract shapes to the paintings increases the randomness of the landscape. Because all of these are in flux, it creates a compelling composition of objects in space.
Trying to define the boundaries of these objects so that they wouldn’t overlap was quite challenging, but I learned a lot more about objects and conditions through this process.