wonderburg7
1/26/2019 - 2:54 PM

Zen cup.pde

PImage img;
int xspacing = 1;   // How far apart should each horizontal location be spaced
int w = 100, w2 = 150; // Width of entire wave

float theta = 0.0;  // Start angle at 0
float theta2 = 0.0;
float amplitude = 3.0,  amplitude2 = 12.0;  // Height of wave
float period = 35, period2 = 150.0;// How many pixels before the wave repeats
float dx, dx2;  // Value for incrementing X, a function of period and xspacing
float[] yvalues, yvalues2;  // Using an array to store height values for the wave
int ballSize = 9;
static final color BG = -4;

void setup() {
  size(1000, 1000);
  imageMode(CENTER);
  dx = (TWO_PI / period) * xspacing;
  dx2 = (TWO_PI / period2) * xspacing;

  yvalues = new float[w/xspacing];
  yvalues2 = new float[w2/xspacing];
  img = loadImage("zen cup.png");
  img.resize(width, height);
}

void draw() {
  background(BG);
  image(img,width/2.0, height/2.0);
  calcWave();
  renderWave();
  saveTransparentCanvas(BG, "img");  
}

void calcWave() {
  // Increment theta (try different values for 'angular velocity' here
  theta += 0.1;
  theta2 += 0.05;

  // For every x value, calculate a y value with sine function
  float x = theta;
  for (int i = 0; i < yvalues.length; i++) {
    yvalues[i] = sin(x)*amplitude;
    x+=dx;
  }
  
   x = theta2;
  for (int i = 0; i < yvalues2.length; i++) {
    yvalues2[i] = sin(x)*amplitude2;
    x+=dx2;
  }
}

void renderWave() {
  noStroke();
  fill(0);
  // A simple way to draw the wave with an ellipse at each location
  for (int x = 0; x < yvalues.length; x++) {
    pushMatrix();
    translate(0,35);
    ellipse(height/2+yvalues[x], x*xspacing, ballSize, ballSize);
    ellipse(height/2+yvalues[x]-70, x*xspacing+20, ballSize, ballSize);
    ellipse(height/2+yvalues[x]+70, x*xspacing+20, ballSize, ballSize);

    popMatrix();
    
    if (yvalues[x]+70 == 70.2995){
      print(frameCount);
    }
  }
  
  
 
    for (int x = 0; x < yvalues2.length; x++) {
    pushMatrix();
    translate(0,35);
    ellipse(height/2+yvalues2[x], x*xspacing+600, ballSize, ballSize);
    popMatrix();
  }
  
}

void saveTransparentCanvas(final color bg, final String name) {
  final PImage canvas = get(0,0,height,width);
  canvas.format = ARGB;
 
  final color p[] = canvas.pixels, bgt = bg & ~#000000;
  for (int i = 0; i != p.length; ++i)  if (p[i] == bg)  p[i] = bgt;
 
  canvas.updatePixels();
  canvas.save("Frame####"+frameCount+".png");
}