/*class Gesture { int maximum = 100; Position[] points = new Position[maximum]; int num; int hold = 0, count = 2; Gesture() { for (int i = 0; i < maximum; i++) { points[i] = new Position(mouseX,mouseY); } } void be() { record(); intersect(); draw(); } void record() { if (num < maximum) { points[num].set(mouseX, mouseY); num++; hold = 0; } else { for (int i = 0; i < maximum-1; i++) { points[i].set(points[i+1]); } points[maximum-1].set(mouseX, mouseY); } } void draw() { stroke(0); beginShape(LINE_STRIP); for (int i = 0; i < maximum; i++) { if (points[i].on_screen()) { curveVertex(points[i].x, points[i].y); } } endShape(); noStroke(); rectMode(CENTER); fill(0,0,255); for (int i = 0; i < maximum; i++) { if (points[i].on_screen()) { rect(points[i].x, points[i].y, 5, 5); } } } void intersect() { float m1,m2,b1,b2,ix,iy; boolean found_intersection = false; for (int i = 0; i < maximum - 2 && !found_intersection; i++){ for (int j = i + 1; j < maximum - 2 && !found_intersection; j++){ Position p1a = new Position(points[i]); Position p1b = new Position(points[i + 1]); Position p2a = new Position(points[j]); Position p2b = new Position(points[j + 1]); // first line segment m1 = (p1a.y - p1b.y) / (p1a.x - p1b.x); b1 = p1a.y-m1*p1a.x; // second line segment m2 = (p2a.y - p2b.y) / (p2a.x - p2b.x); b2 = p2a.y - m2*p2a.x; // find the intersection ix = (b2-b1)/(m1-m2); iy = m1*ix+b1; // if they're not parallel if (m1 != m2) { if (ix > min(p1a.x, p1b.x) && ix < max(p1a.x, p1b.x) && iy > min(p1a.y, p1b.y) && iy < max(p1a.y, p1b.y) && ix > min(p2a.x, p2b.x) && ix < max(p2a.x, p2b.x) && iy > min(p2a.y, p2b.y) && iy < max(p2a.y, p2b.y)){ found_intersection = true; // mark intersections if (i_count < i_max) { intersects[i_count].set(ix, iy); i_count++; } else { for (int k = 0; k < i_max-1; k++) { intersects[k].set(intersects[k+1]); } intersects[i_max-1].set(ix, iy); } // send the points to the shape object s.set(points, i); reset(); } } } } } void reset() { for (int i = 0; i < maximum; i++) { points[i].set(-10, -10); } } }*/