mirror of
https://github.com/processing/processing4.git
synced 2026-02-07 15:49:17 +01:00
67 lines
1.5 KiB
Plaintext
67 lines
1.5 KiB
Plaintext
// An object that wraps the PShape
|
|
|
|
class Wiggler {
|
|
|
|
// The PShape to be "wiggled"
|
|
PShape s;
|
|
// Its location
|
|
float x, y;
|
|
|
|
// For 2D Perlin noise
|
|
float yoff = 0;
|
|
|
|
// We are using an ArrayList to keep a duplicate copy
|
|
// of vertices original locations.
|
|
ArrayList<PVector> original;
|
|
|
|
Wiggler() {
|
|
x = width/2;
|
|
y = height/2;
|
|
|
|
// The "original" locations of the vertices make up a circle
|
|
original = new ArrayList<PVector>();
|
|
for (float a = 0; a < TWO_PI; a+=0.2) {
|
|
PVector v = PVector.fromAngle(a);
|
|
v.mult(100);
|
|
original.add(v);
|
|
}
|
|
|
|
// Now make the PShape with those vertices
|
|
s = createShape();
|
|
s.fill(127);
|
|
s.stroke(0);
|
|
s.strokeWeight(2);
|
|
for (PVector v : original) {
|
|
s.vertex(v.x, v.y);
|
|
}
|
|
s.end(CLOSE);
|
|
}
|
|
|
|
void wiggle() {
|
|
float xoff = 0;
|
|
// Apply an offset to each vertex
|
|
for (int i = 0; i < s.getVertexCount(); i++) {
|
|
// Calculate a new vertex location based on noise around "original" location
|
|
PVector pos = original.get(i);
|
|
float a = TWO_PI*noise(xoff,yoff);
|
|
PVector r = PVector.fromAngle(a);
|
|
r.mult(4);
|
|
r.add(pos);
|
|
// Set the location of each vertex to the new one
|
|
s.setVertex(i, r.x, r.y);
|
|
// increment perlin noise x value
|
|
xoff+= 0.5;
|
|
}
|
|
// Increment perlin noise y value
|
|
yoff += 0.02;
|
|
}
|
|
|
|
void display() {
|
|
pushMatrix();
|
|
translate(x, y);
|
|
shape(s);
|
|
popMatrix();
|
|
}
|
|
}
|
|
|