point p[] = new point[60]; double hx[] = new double[p.length]; double hy[] = new double[p.length]; point op; point cp; double dist, dire; double xx, yy, xxx, yyy; int now; int bai = 10; double sx, sy, ex, ey; double dx[][] = new double[bai][p.length]; double dy[][] = new double[bai][p.length]; double percentage; boolean mouseP; double hCol, sCol, bCol, ihCol, isCol, ibCol; double ohCol, osCol, obCol, iohCol, iosCol, iobCol; double lhCol, lsCol, lbCol, ilhCol, ilsCol, ilbCol; Color col; Polygon pl; //sample [setup, 600, 600]{ cp = point(monitorWidth / 2, monitorHeight / 2); dist = 60; op = point(cp.x, cp.y - 5); for(int i = 0; i < p.length; i ++){ op.rotate(cp.x, cp.y, Math.toRadians(360 / p.length)); hx[i] = op.x; hy[i] = op.y; p[i] = point(op.x, op.y); } for(int i = 0; i < bai; i++){ for(int ii = 0; ii < p.length; ii ++){ dx[i][ii] = cp.x; dy[i][ii] = cp.y; } } now = 0; setBackColor(255, 255, 255); mouseP = false; hCol = 0.2; sCol = 0.0; bCol = 1.0; ohCol = 0.7; osCol = 1.0; obCol = 0.0; lhCol = 0.9; lsCol = 0.0; lbCol = 1.0; ihCol = hCol; isCol = sCol; ibCol = bCol; iohCol = ohCol; iosCol = osCol; iobCol = obCol; ilhCol = lhCol; ilsCol = lsCol; ilbCol = lbCol; } [paint]{ col = Color.getHSBColor((float)hCol, (float)sCol, (float)bCol); setColor(col); fillRect(0, 0, monitorWidth, monitorHeight); setPenSize(1); dist = 60.; //line for(int i = 0; i < bai; i ++){ pl = new Polygon(); for(int ii = 0; ii < p.length; ii ++){ pl.addPoint((int)dx[i][ii], (int)dy[i][ii]); } col = Color.getHSBColor((float)(lhCol + i / 100.0), (float)lsCol, (float)(lbCol)); setColor(col); fillPolygon(pl); if(obCol < osCol){ col = Color.getHSBColor((float)ohCol, (float)osCol, (float)obCol); setColor(col); for(int ii = 0; ii < p.length; ii ++){ fillOval(dx[i][ii], dy[i][ii], 1, 1); } } } } [interval, 0.1]{ dire = cp.directionTo(hx[now], hy[now]); p[now].push(100, dire); now = now +1; if(p.length - 1 < now) now = 0; } [interval, 3]{ for(int i = 0; i < p.length; i ++){ dire = cp.directionTo(hx[i], hy[i]); p[i].push(70, dire); } } [interval, 10]{ System.gc(); } [always]{ for(int i = 0; i < p.length; i++){ dist = p[i].distanceTo(hx[i], hy[i]); dire = p[i].directionTo(hx[i], hy[i]); p[i].push(dist / 4., dire); sx = cp.x + (cp.x - p[i].x)*8; sy = cp.y + (cp.y - p[i].y)*8; for(int ii = 0; ii < bai; ii ++){ dx[ii][i] += (sx - dx[ii][i])/(double)(ii); dy[ii][i] += (sy - dy[ii][i])/(double)(ii); } } //mouse event if(mouseP == true){ //bg ihCol = 0.0; isCol = 0.99; ibCol = 0.99; //line ilhCol = 0.7; ilsCol = 0.99; ilbCol = 0.99; //oval iohCol = 0.2; iosCol = 0.0; iobCol = 0.99; }else{ //bg ihCol = 0.2; isCol = 0.0; ibCol = 0.99; //line ilhCol = 0.9; ilsCol = 0.0; ilbCol = 0.99; //oval iohCol = 0.2; iosCol = 0.99; iobCol = 0.0; } //color calculation lhCol += (ilhCol - lhCol)/5.0; lsCol += (ilsCol - lsCol)/5.0; lbCol += (ilbCol - lbCol)/5.0; ohCol += (iohCol - ohCol)/5.0; osCol += (iosCol - osCol)/5.0; obCol += (iobCol - obCol)/5.0; hCol += (ihCol - hCol)/5.0; sCol += (isCol - sCol)/5.0; bCol += (ibCol - bCol)/5.0; colormanage(lhCol); colormanage(lsCol); colormanage(lbCol); colormanage(hCol); colormanage(sCol); colormanage(bCol); colormanage(ohCol); colormanage(osCol); colormanage(obCol); } void colormanage(double colcol){ if(colcol < 0.0) colcol = 0.0; if(0.99 < colcol) colcol = 0.99; } [mousePressed]{ mouseP =true; } [mouseReleased]{ mouseP = false; }