float speedKx, speedKy, xK, yK; int radiusK=40, MAX_DIST=70, ANZ=110; small[] s=new small[ANZ+10]; void setup() { size(400,400); background (0,200,0); ellipseMode(CENTER_DIAMETER); noStroke(); fill(0,255,0); xK=random(300)+50; yK=random(300)+50; speedKx=random(-3,3); speedKy=random(-3,3); int i; for (i=1; iwidth+radiusK) xK=-radiusK; else if (xK<-radiusK) xK=width+radiusK; if (yK>height+radiusK) yK=-radiusK; else if (yK<-radiusK) yK=height+radiusK; stroke(0,255,0); noFill(); ellipse (xK,yK,(radiusK+MAX_DIST)*2, (radiusK+MAX_DIST)*2); noStroke(); fill(0,255,0); ellipse (xK,yK,radiusK*2, radiusK*2); } class small { float speedMEx, speedMEy, xME, yME; int radiusME; small(float speedX, float speedY, float X, float Y, int rad) { speedMEx=speedX; speedMEy=speedY; xME=X; yME=Y; radiusME=rad; } void move() { float distR=dist(); if (distR=0) { //println(distR); speedMEx+=antispeed(xME, xK); speedMEy+=antispeed(yME, yK); } else if (distR<0) { speedMEx=speedMEy=0; speedMEx+=antispeed(xME, xK); speedMEy+=antispeed(yME, yK); } if (speedMEx>3) speedMEx=3; else if (speedMEx<-3) speedMEx=-3; if (speedMEy>3) speedMEy=3; else if (speedMEy<-3) speedMEy=-3; xME+=speedMEx; yME+=speedMEy; if (xME>width+radiusME) xME=-radiusME; else if (xME<-radiusME) xME=width+radiusME; if (yME>height+radiusME) yME=-radiusME; else if (yME<-radiusME) yME=height+radiusME; ellipse (xME, yME, radiusME*2, radiusME*2); } float antispeed(float ME, float K) { float speed, distD; distD=ME-K; if (distD>=0) { distD-=radiusK; speed=3-distD*3/MAX_DIST; } else { distD+=radiusK; speed=-3-distD*3/MAX_DIST; } return speed; } float dist() { float dist_temp; dist_temp=sqrt((xME-xK)*(xME-xK)+(yME-yK)*(yME-yK)); dist_temp-=radiusK; return (dist_temp); } }