This version of Simple Harmonic Motion will feature multiple particles moving in harmonic motion along different axes. Each particle’s motion is governed by sine and cosine functions, and we’ll experiment with adding layers of complexity by adjusting frequency, amplitude, and phase shift over time. The interaction of these particles will create a visually intriguing harmonic system.
Design Approach
- Multiple Oscillators: Each oscillator (particle) will move along one or two axes following SHM principles.
- Phase Shifting: The oscillators will have slight differences in their phase, creating beautiful and non-repetitive motion patterns.
- Layering Frequencies: Multiple sine and cosine waves will be layered to simulate interacting harmonic systems.
- Memo Akten’s Influence: Drawing from Memo Akten’s complex motion systems, we’ll make the motion more intricate by introducing randomness to parameters like amplitude and frequency over time.
Code design
- Particles: Each particle is modeled as a point oscillating based on sine and cosine functions, representing harmonic motion along both the X and Y axes.
- Amplitude and Frequency: The amplitude controls how far the particle moves, while the frequency controls how fast it oscillates.
- Phase Shift: Each particle starts with a random phase, ensuring their motion is out of sync, creating an intricate, layered pattern.
let particles = []; function setup() { createCanvas(800, 800); for (let i = 0; i < 10; i++) { particles.push(new Particle(random(50, 100), random(50, 200), random(0.02, 0.05))); } } class Particle { constructor(amplitudeX, amplitudeY, frequency) { this.amplitudeX = amplitudeX; // Amplitude of motion in X this.amplitudeY = amplitudeY; // Amplitude of motion in Y this.frequency = frequency; // Frequency of oscillation this.angle = random(TWO_PI); // Starting phase angle } update() { // Increment angle over time to simulate oscillation this.angle += this.frequency; } display() { let x = this.amplitudeX * cos(this.angle); // Simple harmonic motion in X let y = this.amplitudeY * sin(this.angle); // Simple harmonic motion in Y noFill(); stroke(255, 200); ellipse(x, y, 50, 50); // Draw particle at (x, y) } }