point p[]; [setup, 400, 400]{ p = new point[32]; for(int i = 0; i < p.length; ++i){ double x = 200 + 80*Math.cos(i*Math.PI*2/p.length); double y = 200 + 80*Math.sin(i*Math.PI*2/p.length); p[i] = new point(x, y); } } [paint]{ clearAll(); for(int i = 0; i < p.length; ++i){ point pA, pB, pC; if(i == 0) pA = p[p.length-1]; else pA = p[i-1]; pB = p[i]; if(i == p.length-1) pC = p[0]; else pC = p[i+1]; drawBezierCurve((pA.x+pB.x)/2, (pA.y+pB.y)/2, pB.x, pB.y, pB.x, pB.y, (pB.x+pC.x)/2, (pB.y+pC.y)/2); } } [always]{ for(int i = 0; i < p.length; ++i){ double dist = p[i].distanceTo(mouseX, mouseY); double f = 0; if(dist < 100) f = 100-dist; double dire = point.directionBetween(preMouseX, preMouseY, mouseX, mouseY); if(preMouseX != mouseX && preMouseY != mouseY){ p[i].push(f*0.8, dire); } double x = 200 + 80*Math.cos(i*Math.PI*2/p.length); double y = 200 + 80*Math.sin(i*Math.PI*2/p.length); p[i].pushTo(x, y); } }