point p[] = new point[130]; int cur; double velo[] = new double[p.length]; //velocity double dire[] = new double[p.length]; //direction double w[] = new double[p.length]; //width double h[] = new double[p.length]; //height boolean mouseP; double cursX, cursY, cureX, cureY; //current start x, y, end x, y. double curW, curH; //current width, current height. double pressX, pressY, releaseX, releaseY; long sTime, eTime; //startTime, endTime; double ch[] = new double[p.length]; //hsb hue double cs[] = new double[p.length]; //hsb saturation double cb[] = new double[p.length]; //hsb brightness double curch, curcs, curcb; Color col; //sample [setup, 600, 600]{ setBackColor(255, 255, 255); cur = 0; for(int i = 0; i < p.length; i ++){ p[i] = point(0, 0); velo[i] = 0.; dire[i] = 0.; } mouseP = false; } [paint]{ clearAll(); for(int i = 0; i <= cur; i ++){ col = Color.getHSBColor((float)ch[i], (float)cs[i], (float)cb[i]); setColor(col); fillRect(p[i].x, p[i].y, w[i], h[i]); } if(mouseP == true){ col = Color.getHSBColor((float)curch, (float)curcs, (float)curcb); setColor(col); fillRect(cursX, cursY, curW, curH); } } [always]{ if(mouseP == true){ if(mouseX < pressX){ cursX = mouseX; cureX = pressX; }else{ cursX = pressX; cureX = mouseX; } if(mouseY < pressY){ cursY = mouseY; cureY = pressY; }else{ cursY = pressY; cureY = mouseY; } curW = cureX - cursX; curH = cureY - cursY; curch = direction(pressX, pressY, mouseX, mouseY) / (2 *Math.PI); eTime = new java.util.Date().getTime(); curcs = 1.0 - 1.0 * 100. /(double)(eTime - sTime); if(1.0 < curcs) curcs = 1.0; if(curcs < 0.) curcs = 0.; curcb = 1.0 - 0.2 * distance(pressX, pressY, mouseX, mouseY) / ((double)monitorWidth * Math.sqrt(2.)); if(1.0 < curcb) curcb = 1.0; if(curcb < 0.) curcb = 0.; } for(int i = 0; i <= cur; i ++){ p[i].push(velo[i], dire[i]); if(p[i].x < 0 || monitorWidth < p[i].x + w[i]){ dire[i] = Math.PI - dire[i]; p[i].bound(Math.PI / 2., 1.); } if(p[i].y < 0 || monitorHeight < p[i].y + h[i]){ dire[i] = -dire[i]; p[i].bound(0., 1.); } } } [mousePressed]{ mouseP = true; pressX = mouseX; pressY = mouseY; sTime = new java.util.Date().getTime(); } [mouseReleased]{ eTime = new java.util.Date().getTime(); releaseX = mouseX; releaseY = mouseY; if(cur < p.length - 1){ cur += 1; if(monitorWidth < cureX) cureX = monitorWidth; if(monitorHeight < cureY) cureY = monitorHeight; p[cur].x = cursX; p[cur].y = cursY; w[cur] = cureX - cursX; h[cur] = cureY - cursY; velo[cur] = 100. *100. / (double)(eTime - sTime); dire[cur] = direction(pressX, pressY, releaseX, releaseY); ch[cur] = dire[cur] / (2 *Math.PI); cs[cur] = 1.0 -1.0 * 100. /(double)(eTime - sTime); if(1.0 < cs[cur]) cs[cur] = 1.0; if(cs[cur] < 0.) cs[cur] = 0.; cb[cur] = 1.0 - 0.2 * distance(pressX, pressY, releaseX, releaseY) / ((double)monitorWidth * Math.sqrt(2.)); if(1.0 < cb[cur]) cb[cur] = 1.0; if(cb[cur] < 0.) cb[cur] = 0.; } mouseP = false; }