float x, y, xx, yy, bx, by, t;
mCurve (float vx, float vy, float vxx, float vyy, float bx, float by, float tt) {
mCurve Curve1=new mCurve(1, 1, 1, 1, 1, 1, 1);
mCurve Curve2=new mCurve(1, 1, 1, 1, 1, 1, 1);
mCurve Curve1next=new mCurve(1, 1, 1, 1, 1, 1, 1);
mCurve Curve2next=new mCurve(1, 1, 1, 1, 1, 1, 1);
float xx1, yy1, xx2, yy2, xx1n, yy1n, xx1nn, yy1nn, xx2n, yy2n, xx2nn, yy2nn, counter1, hue, br=100, sat=200;
float strokeBlue, strokeOrange, counterstep, tstep, angle=100;
int sizew =1000,sizeh=800;
Curve1next.x=random(sizew);
Curve1next.y=random(sizeh);
Curve1next.xx=random(sizew);
Curve1next.yy=random(sizeh);
Curve1next.bx=random(sizew);
Curve1next.by=random(sizeh);
Curve2next.x=random(sizew);
Curve2next.y=random(sizeh);
Curve2next.xx=random(sizew);
Curve2next.yy=random(sizeh);
Curve2next.bx=random(sizew);
Curve2next.by=random(sizeh);
int passedTime = millis() - savedTime;
if (passedTime > totalTime) {
if (int(random(0, backwards))==1) {
anglestep=-random(0, .0005);
if (int(random(0, backwards))==2) {
anglestep=random(0, .0005);
render(random(0.01,0.06), random(0.01,.017), 2);
void render (float counterV, float stepV, int mode)
if (mouseButton == LEFT) {
if (mouseButton == RIGHT) {
point(Curve1.x, Curve1.y);
point(Curve1.xx, Curve1.yy);
point(Curve2.x, Curve2.y);
point(Curve2.xx, Curve2.yy);
point(Curve1next.x, Curve1next.y);
point(Curve1next.xx, Curve1next.yy);
point(Curve2next.x, Curve2next.y);
point(Curve2next.xx, Curve2next.yy);
point(Curve2.bx, Curve2.by);
point(Curve1.bx, Curve1.by);
point(Curve2.bx, Curve2.by);
text("The left and the right clicks control the line curvature", width/2-100, height-180);
text("Press 1, 2 and 0 for different modes, 'a' to clear, 's' to save", width/2-100, height-150);
translate(width/2, height/2);
strokeOrange=random(0, 3);
hue=random(100, 140); br=100; sat=100;
if (int(random(0, prob6))>=4) {
if (int(random(0, prob10))==1) {
if (int(random(0, prob5))==1) {
if (br<150) { sat=random(220, 255);}
Curve1.bx= Curve1next.bx;
Curve1.by= Curve1next.by;
Curve1.xx= Curve1next.xx;
Curve1.yy= Curve1next.yy;
Curve1next.x=random(width);
Curve1next.y=random(height);
Curve1next.xx=random(width);
Curve1next.yy=random(height);
Curve1next.bx=random(width);
Curve1next.by=random(height);
Curve2.bx= Curve2next.bx;
Curve2.by= Curve2next.by;
Curve2.xx= Curve2next.xx;
Curve2.yy= Curve2next.yy;
Curve2next.x=random(width);
Curve2next.y=random(height);
Curve2next.xx=random(width);
Curve2next.yy=random(height);
Curve2next.bx=random(width);
Curve2next.by=random(height);
counter1=counter1+counterV;
for (float t=0; t<1;t=t+stepV)
xx1 = (int) ((1-t)*(1-t)*Curve1.x + 2*(1-t)*t*Curve1.bx+t*t*Curve1.xx);
yy1 = (int)((1-t)*(1-t)*Curve1.y + 2*(1-t)*t*Curve1.by+t*t*Curve1.yy);
xx2 =(int) ((1-t)*(1-t)*Curve2.x + 2*(1-t)*t*Curve2.bx+t*t*Curve2.xx);
yy2 = (int)((1-t)*(1-t)*Curve2.y + 2*(1-t)*t*Curve2.by+t*t*Curve2.yy);
stroke(random(130, 150), 255, 255);
strokeOrange=random(1, 2);
strokeWeight(strokeBlue);
stroke(random(10, 30), 255, 255);
strokeOrange=random(1, 2);
strokeWeight(strokeOrange);
line(xx1, yy1, xx2, yy2);
xx1n =(int) ((1-counter1)*(1-counter1)*Curve1.x + 2*(1-counter1)*counter1*Curve1.bx+counter1*counter1*Curve1next.x);
yy1n = (int)((1-counter1)*(1-counter1)*Curve1.y + 2*(1-counter1)*counter1*Curve1.by+counter1*counter1*Curve1next.y);
xx1nn =(int) ((1-counter1)*(1-counter1)*Curve1.xx + 2*(1-counter1)*counter1*Curve1.bx+counter1*counter1*Curve1next.xx);
yy1nn = (int)((1-counter1)*(1-counter1)*Curve1.yy + 2*(1-counter1)*counter1*Curve1.by+counter1*counter1*Curve1next.yy);
xx2n =(int) ((1-counter1)*(1-counter1)*Curve2.x + 2*(1-counter1)*counter1*Curve2.bx+counter1*counter1*Curve2next.x);
yy2n = (int)((1-counter1)*(1-counter1)*Curve2.y + 2*(1-counter1)*counter1*Curve2.by+counter1*counter1*Curve2next.y);
xx2nn =(int) ((1-counter1)*(1-counter1)*Curve2.xx + 2*(1-counter1)*counter1*Curve2.bx+counter1*counter1*Curve2next.xx);
yy2nn = (int)((1-counter1)*(1-counter1)*Curve2.yy + 2*(1-counter1)*counter1*Curve2.by+counter1*counter1*Curve2next.yy);