Mouse Controlled Kaleidoscope
June 6th, 2008
I have added some mouse controls to my kaleidoscope so that the type of motion changes based on the position of the mouse.
The motion is slow if the mouse is in the top-left corner and speeds up as you move in any direction from the top-left, moving in different ways depending on the direction of the mouse.
I have added the ability to be able to control the animation by clicking the mouse as well. This is commented out in the online file and in the source code, but can easily be turned back on by uncommenting it.
If the comments are removed, then no animation will occur until the left mouse button is pressed. When it is pressed it will behave the same way as when the mouse button control is commented out. When the mouse button is released, the animation stops.
Note that with the mousePressed() function commented out, nothing will happen until the mouse first moves over the sketch.
The source code is below.
// Create the variables.
Point[]p = new Point[3];
float shift = 2.0;
float spin = 0;
// Setup the sketch.
void setup(){
size(800, 800);
background(0);
smooth();
noStroke();
}
void draw() {
spin = 360.0/(width/2.0/shift);
p[0] = new Point(-width/2, height/2);
p[1] = new Point(width/2, height/2);
p[2] = new Point(0, -height/2);
// Centre the spiral
translate(width/2, height/2);
//if (mousePressed && (mouseButton == LEFT)) {
spiral(mouseY, pmouseY, mouseX);
//}
}
// Create the spiral function with 3 parameters.
void spiral(float shift1, float shift2, float shift3){
// Control the rotation of the spiral.
// Additional rotate()'s can be added for different effects.
rotate(spin);
rotate(PI/3.0);
// Define the fill colour.
float r = random(100, 255);
float g = random(100, 255);
float b = random(100, 255);
fill(r, g, b, 10);
// Create the triangle
triangle(p[0].x+=shift, p[0].y-=shift/(random(shift1)), p[1].x-=shift, p[1].y-=shift/(random(shift2)), p[2].x, p[2].y+=shift*(random(shift3)));
// Determine the requirements for recursion.
if(p[0].x<0){
// recursive call
spiral(shift1, shift2, shift3);
}
}













Leave a Reply