void setup(){
size(500, 500);
smooth();
}
void draw(){
background(240, 255, 240);
translate(width / 2, 0);
stroke(128, 128, 0);
strokeWeight(3);
fill(238, 232, 170);
beginShape();
float phase = map(mouseX, 0, width, - 5 * PI, 5 * TWO_PI);
float MAX_ANGLE = map(mouseY, 0, height, 360, 7200);
for(float angle = 0; angle < MAX_ANGLE; angle += 5){
float radian = radians(angle) + phase;
float offset = map(sin((angle / MAX_ANGLE) * PI), 0, 1, 0, 50);
float amp = map(sin((angle / MAX_ANGLE) * PI), 0, 1, 0, 100);
vertex(-offset + amp * sin(radian), map(angle, 0, MAX_ANGLE, 50, 450));
}
for(float angle = MAX_ANGLE; angle > 0; angle -= 5){
float radian = radians(angle) + phase;
float offset = map(sin((angle / MAX_ANGLE) * PI), 0, 1, 0, 50);
float amp = map(sin((angle / MAX_ANGLE) * PI), 0, 1, 0, 100);
vertex(offset + amp * sin(radian), map(angle, 0, MAX_ANGLE, 50, 450));
}
endShape(CLOSE);
}