The overall concept for this week’s assignment is that I wanted to portray what things look like in a closer look. The vibrating movements of various atoms and molecules based on the interactivity of the user is what i wanted to make. Based on mouse pressing and mouse dragging, there are different actions for each of them. If the mouse is pressed, a random shape subclass will be painted on the canvas, while if mouse is dragged, the background color, size changes and the shapes gain erratic movement. I used a parent class Shape and subclass for different shapes with move, display, and update methods. Although I encountered no visible problems, it was refreshing to make color and interactive artwork.
Shapes class Code:
class Shape { constructor(x, y, size, color) { this.x = x; this.y = y; this.size = size; this.color = color; this.offsetX = random(-1, 1); this.offsetY = random(-1, 1); } display() { // Abstract method } update(x, y) { // Abstract method } move(){ // Abstract method } } //star subclass class Star extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(random(255), random(255), random(255), 100)); } display() { fill(this.color); beginShape(); for (let i = 0; i < 10; i++) { let angle = TWO_PI * i / 10; let r = this.size * (i % 2 === 0 ? 0.5 : 1); let x = this.x + cos(angle) * r; let y = this.y + sin(angle) * r; vertex(x, y); } endShape(CLOSE); } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } } //diamond subclass class Diamond extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(random(255), random(255), random(255), 100)); } display() { fill(this.color); beginShape(); vertex(this.x, this.y - this.size / 2); vertex(this.x - this.size / 2, this.y); vertex(this.x, this.y + this.size / 2); vertex(this.x + this.size / 2, this.y); endShape(CLOSE); } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } } //atom subclass class Atom extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(random(255), random(255), random(255), 100)); } display() { fill(this.color); ellipse(this.x, this.y, this.size, this.size); fill(255); ellipse(this.x - this.size / 4, this.y - this.size / 4, this.size / 2, this.size / 2); } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } } //molecule subclass class Molecule extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(random(255), random(255), random(255), 100)); } display() { fill(this.color); ellipse(this.x, this.y, this.size, this.size); fill(255); ellipse(this.x - this.size / 4, this.y - this.size / 4, this.size / 2, this.size / 2); ellipse(this.x + this.size / 4, this.y + this.size / 4, this.size / 2, this.size / 2); } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } } //water molecule subclass class WaterMolecule extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(0, 0, 255, 100)); // Blue color for water } display() { fill(this.color); ellipse(this.x, this.y - this.size / 4, this.size / 2, this.size / 2); // Oxygen atom fill(255); ellipse(this.x - this.size / 4, this.y + this.size / 4, this.size / 3, this.size / 3); // Hydrogen atom 1 ellipse(this.x + this.size / 4, this.y + this.size / 4, this.size / 3, this.size / 3); // Hydrogen atom 2 } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } } //Co2 subclass class CarbonDioxideMolecule extends Shape { constructor(x, y) { super(x, y, random(20, 100), color(255, 0, 0, 100)); // Red color for carbon dioxide } display() { fill(this.color); ellipse(this.x, this.y - this.size / 4, this.size / 2, this.size / 2); // Carbon atom fill(255); ellipse(this.x - this.size / 3, this.y + this.size / 4, this.size / 3, this.size / 3); // Oxygen atom 1 ellipse(this.x + this.size / 3, this.y + this.size / 4, this.size / 3, this.size / 3); // Oxygen atom } update(x, y) { let d = dist(this.x, this.y, x, y); this.size = map(d, 0, width, 20, 100); } move() { // Vibrate the molecule in place this.x += random(-1, 1); this.y += random(-1, 1); } }