57 lines
1.6 KiB
Plaintext
57 lines
1.6 KiB
Plaintext
// The Nature of Code
|
|
// Daniel Shiffman
|
|
// http://natureofcode.com
|
|
|
|
class Wave {
|
|
|
|
int xspacing = 8; // How far apart should each horizontal position be spaced
|
|
int w; // Width of entire wave
|
|
|
|
PVector origin; // Where does the wave's first point start
|
|
float theta = 0.0; // Start angle at 0
|
|
float amplitude; // Height of wave
|
|
float period; // How many pixels before the wave repeats
|
|
float dx; // Value for incrementing X, to be calculated as a function of period and xspacing
|
|
//float[] yvalues; // Using an array to store height values for the wave (not entirely necessary)
|
|
Particle[] particles;
|
|
|
|
Wave(PVector o, int w_, float a, float p) {
|
|
origin = o.get();
|
|
w = w_;
|
|
period = p;
|
|
amplitude = a;
|
|
dx = (TWO_PI / period) * xspacing;
|
|
particles = new Particle[w/xspacing];
|
|
for (int i = 0; i < particles.length; i++) {
|
|
particles[i] = new Particle();
|
|
}
|
|
}
|
|
|
|
|
|
void calculate() {
|
|
// Increment theta (try different values for 'angular velocity' here
|
|
theta += 0.02;
|
|
|
|
// For every x value, calculate a y value with sine function
|
|
float x = theta;
|
|
for (int i = 0; i < particles.length; i++) {
|
|
particles[i].setposition(origin.x+i*xspacing,origin.y+sin(x)*amplitude);
|
|
x+=dx;
|
|
}
|
|
}
|
|
|
|
void manipulate() {
|
|
// Loop through the array of particles and check stuff regarding the mouse
|
|
|
|
}
|
|
|
|
void display() {
|
|
|
|
// A simple way to draw the wave with an ellipse at each position
|
|
for (int i = 0; i < particles.length; i++) {
|
|
particles[i].display();
|
|
}
|
|
}
|
|
}
|
|
|