Fourier series

Hau Phan / May 18, 2022

1 min read

var n = 10;
var wave;

function setup() {
  createCanvas(1280, 720);
  strokeWeight(2);
  wave = [];
  angle = 0;
}

function draw() {
  background(255);

  translate(width / 2 - 200, height / 2);
  var x = 0;
  var y = 0;
  for (let i = 0; i < n; i++) {
    var prevx = x;
    var prevy = y;
    var phi = 2 * i + 1;
    var radius = 100 * (4 / (phi * PI));
    x += radius * cos(phi * angle);
    y += radius * sin(phi * angle);
    // Draw circles
    ellipseMode(RADIUS);
    noFill();
    stroke(0, 150);
    ellipse(prevx, prevy, radius);
    stroke(0, 100);
    line(prevx, prevy, x, y);
  }

  wave.unshift(y);
  stroke(0, 50);
  line(x, y, 300, wave[0]);
  stroke(0);

  // Draw wave
  translate(300, 0);
  beginShape();
  noFill();
  for (let i = 0; i < wave.length; i++) {
    vertex(i * 0.6, wave[i]);
  }
  endShape();
  if (wave.length > 500) {
    wave.pop();
  }
  angle += 0.02;
}

Contact me!

Below are my primary work email address.
You can also message me on LinkedIn and Facebook.

Reply times tend to be 1-2 days (at most).