float pi = 3.14159265; float p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y; float out1x, out1y, out2x, out2y, out3x, out3y, out4x, out4y; float p11x, p11y, p12x, p12y, p21x, p21y, p22x, p22y, p31x, p31y, p32x, p32y, p41x, p41y, p42x, p42y; float p4nx, p4ny, p42nx, p42ny; // bezier curve calculations void calculations(int type, float cx, float cy, float radius, int i) { float wi = 0.1*random(5,7); float x, y; //points p1x = cx-radius*cos(pi/4)*wi; p1y = cy-radius*sin(pi/4); p2x = cx+radius*cos(pi/4); p2y = cy-radius*sin(pi/4); p3x = cx+radius*cos(pi/4); p3y = cy+radius*sin(pi/4); p4x = cx-radius*cos(pi/4)*wi; p4y = cy+radius*sin(pi/4); //out out1x = radius*0.5; out1y = radius*0.5; out2x = radius*0.5; out2y = radius*0.5; out3x = radius*0.5; out3y = radius*0.5; out4x = radius*0.5; out4y = radius*0.5; if (i>=3) { if (type == 0) { p1x = p1x + i*i*radius*0.002; p1y = p1y + i*i*radius*0.001; p2x = p2x + i*i*radius*0.0009; p4x = p4x + i*i*radius*0.0011; out2x = out2x - i*i*radius*0.0007; out4x = out4x - i*i*radius*0.0008; out4y = out4y - i*i*radius*0.0004; } else if (type == 1) { p1x = p1x + i*i*radius*0.0008; p1y = p1y - i*i*radius*0.0004; p3x = p3x + i*i*radius*0.0009; p4x = p4x + i*i*radius*0.002; p4y = p4y - i*i*radius*0.001; out1x = out1x - i*i*radius*0.0008; out1y = out1y - i*i*radius*0.0002; out3x = out3x - i*i*radius*0.0007; } else if (type == 2) { p2x = p2x - i*i*radius*0.0011; p3x = p3x - i*i*radius*0.002; p3y = p3y - i*i*radius*0.001; p4x = p4x - i*i*radius*0.0009; out2x = out2x - i*i*radius*0.0008; out2y = out2y - i*i*radius*0.0004; out4x = out4x - i*i*radius*0.0007; } } //slant p11x = p1x-out1x*cos(pi/4); p11y = p1y+out1y*sin(pi/4); p21x = p2x-out2x*cos(pi/4); p21y = p2y-out2y*sin(pi/4); p22x = p2x+out2x*cos(pi/4); p22y = p2y+out2y*sin(pi/4); p31x = p3x+out3x*cos(pi/4); p31y = p3y-out3y*sin(pi/4); p32x = p3x-out3x*cos(pi/4); p32y = p3y+out3y*sin(pi/4); p41x = p4x+out4x*cos(pi/4); p41y = p4y+out4y*sin(pi/4); p42x = p4x-out4x*cos(pi/4); p42y = p4y+out4y*sin(pi/4); p12x = p1x+out1x*cos(pi/4); p12y = p1y-out1y*sin(pi/4); p42nx = p4nx-out4x*cos(pi/4); p42ny = p4ny-out4y*sin(pi/4); } // create the spiral blueprint void makeSpiral(Spiral n, int type, float radius) { float cx = 0; float cy = 0; float li, end, addit, inner; p4nx = 0; p4ny = 0; p42nx = 0; p42ny = 0; int repeat = 28; li = random(1,2); end = random(-8, 8); //end = random(-5, 4); addit = random(6, 14); inner = random(8, 14); for (int i=3; i 0) { rotatePoint(1, end*0.3); movePoint(1, 0, end*radius*0.008); rotatePoint(2, end*1.5); movePoint(2, end*radius*0.008, end*radius*0.016); movePoint(3, 0, end*radius*0.001); movePoint(4, 0, end*radius*0.0035); } else { rotatePoint(1, end*0.9); movePoint(1, end*radius*0.013, end*radius*0.005); rotatePoint(2, end*0.4); movePoint(2, end*radius*0.025, end*radius*0.016); rotatePoint(3, end*0.1); movePoint(3, end*radius*0.006, end*radius*0.003); movePoint(4, end*radius*0.004, 0); } } else if (type == 1) { if (end > 0) { rotatePoint(1, end*0.2); movePoint(1, 0, -end*radius*0.0035); movePoint(2, 0, -end*radius*0.0035); rotatePoint(3, -end*1.5); movePoint(3, end*radius*0.008, -end*radius*0.016); rotatePoint(4, -end*0.3); movePoint(4, 0, -end*radius*0.009); } else { rotatePoint(1, -end*0.9); movePoint(1, end*radius*0.007, end*radius*0.005); rotatePoint(2, -end*0.9); movePoint(2, end*radius*0.01, end*radius*0.002); rotatePoint(3, -end*1.3); movePoint(3, end*radius*0.05, -end*radius*0.016); rotatePoint(4, -end*0.7); movePoint(4, end*radius*0.025, -end*radius*0.002); } } else if (type == 2) { if (end > 0) { movePoint(1, 0, -end*radius*0.0035); movePoint(2, 0, -end*radius*0.0035); rotatePoint(3, end*0.3); movePoint(3, 0, -end*radius*0.008); rotatePoint(4, end*1.5); movePoint(4, -end*radius*0.008, -end*radius*0.016); } else { movePoint(1, -end*radius*0.006, end*radius*0.0035); movePoint(2, -end*radius*0.006, end*radius*0.000); rotatePoint(3, end*0.8); movePoint(3, -end*radius*0.015, -end*radius*0.008); rotatePoint(4, end*1.2); movePoint(4, -end*radius*0.035, -end*radius*0.016); } } end = end*1.4; if (i > 3) { p42nx = p4nx+(n.tail.p2.x-n.tail.t2.x); p42ny = p4ny+(n.tail.p2.y-n.tail.t2.y); n.tail.next = new Bez(p4nx, p4ny, p42nx, p42ny, p11x, p11y, p1x, p1y); n.tail.next.prev = n.tail; n.tail = n.tail.next; } else { n.tail = new Bez(p4x-radius*0.25, p4y+radius*0.50, p42x, p42y, p11x, p11y, p1x, p1y); n.head = n.tail; } if (i < repeat) { if (i > repeat-3 && type == 0) { n.tail.next = new Bez(p1x, p1y, p12x, p12y, p21x*2, p21y*2, p2x*2, p2y*2); n.tail.next.prev = n.tail; n.tail = n.tail.next; break; } n.tail.next = new Bez(p1x, p1y, p12x, p12y, p21x, p21y, p2x, p2y); n.tail.next.prev = n.tail; n.tail = n.tail.next; if (i > repeat-3 && type == 1) { n.tail.next = new Bez(p2x, p2y, p22x, p22y, p31x*2, p31y*2, p3x*2, p3y*2); n.tail.next.prev = n.tail; n.tail = n.tail.next; break; } n.tail.next = new Bez(p2x, p2y, p22x, p22y, p31x, p31y, p3x, p3y); n.tail.next.prev = n.tail; n.tail = n.tail.next; if (i > repeat-3 && type == 2) { n.tail.next = new Bez(p3x, p3y, p32x, p32y, p41x*2, p41y*2, p4x*2, p4y*2); n.tail.next.prev = n.tail; n.tail = n.tail.next; break; } n.tail.next = new Bez(p3x, p3y, p32x, p32y, p41x, p41y, p4x, p4y); n.tail.next.prev = n.tail; n.tail = n.tail.next; } p4nx = p4x; p4ny = p4y; // increment if (type == 0) { if (i