Processing
I spent a bit of time this unit getting to know some of the basics of Processing. I went through a few of the tutorials found on the web site to familiarize myself with some simple mouse input codes, grayscale and RGB coloring, drawing lines and shapes, and finally creating Two-Dimensional arrays. I went through the tutorial found here
I used the code in the tutorial to create a grid of cells whose brightness oscillated from 0 to 255 with a sine function.
// 2D Array of objects Cell[][] grid; // Number of columns and rows in the grid int cols = 10; int rows = 10; void setup() { size(200,200); grid = new Cell[cols][rows]; for (int i = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { // Initialize each object grid[i][j] = new Cell(i*20,j*20,20,20,i+j); } } } void draw() { background(0); // The counter variables i and j are also the column and row numbers and // are used as arguments to the constructor for each object in the grid. for (int i = 0; i < cols; i++) { for (int j = 0; j < rows; j++) { // Oscillate and display each object grid[i][j].oscillate(); grid[i][j].display(); } } } // A Cell object class Cell { // A cell object knows about its location in the grid as well as its size with the variables x,y,w,h. float x,y; // x,y location float w,h; // width and height float angle; // angle for oscillating brightness // Cell Constructor Cell(float tempX, float tempY, float tempW, float tempH, float tempAngle) { x = tempX; y = tempY; w = tempW; h = tempH; angle = tempAngle; } // Oscillation means increase angle void oscillate() { angle += 0.02; } void display() { stroke(255); // Color calculated using sine wave fill(127+127*sin(angle)); rect(x,y,w,h); } }
I changed a bit of the code to change the color of the lines in the cells as well as the angle at which the cells oscillate brightness. I then added a mousePressed() function to change between a very steep negative angled cell grid with red lines and less fill to a positive agled cell grid with blue lines and a darker fill. When pressed it seems to have a calmer/slower pattern and when left unpressed a very quick/alarming red pattern zips by. Quick! Hold the mouse!
Modifed code:
// 2D Array of objects
Cell[][] grid;
// Number of columns and rows in the grid
int cols = 50;
int rows = 50;
void setup() {
size(600,700);
grid = new Cell[cols][rows];
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Initialize each object
grid[i][j] = new Cell(i*20,j*20,20,20,i+j);
}
}
}
void draw() {
background(0);
// The counter variables i and j are also the column and row numbers and
// are used as arguments to the constructor for each object in the grid.
for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
// Oscillate and display each object
grid[i][j].oscillate();
grid[i][j].display();
}
}
}
// A Cell object
class Cell {
// A cell object knows about its location in the grid as well as its size with the variables x,y,w,h.
float x,y; // x,y location
float w,h; // width and height
float angle; // angle for oscillating brightness
// Cell Constructor
Cell(float tempX, float tempY, float tempW, float tempH, float tempAngle) {
x = tempX;
y = tempY;
w = tempW;
h = tempH;
angle = tempAngle;
}
// Oscillation means increase angle
void oscillate() {
if(mousePressed) {
angle -= 0.12; }
else { angle += 0.52; }
}
// If mouse is pressed, display darkens and changes color
// Mouse not pressed, alarming RED pattern, quick! Press the Mouse!
void display() {
if(mousePressed) {
stroke(20, 100, 200);
// RGB Color
fill(100+100*sin(angle));
rect(x,y,w,h); }
else { stroke(255, 0, 0);
fill(500+555*sin(angle));
rect(x,y,w,h); }
}
}
Screen Capture can be seen here: