void renderfield() { for (int i = 0; i < nlist.size(); i++) { Node b = (Node) nlist.get(i); b.render(); } } void setsink() { for (int i = 0; i < nlist.size(); i++) { Node b = (Node) nlist.get(i); b.setSINK(sin(radians(millis()+i*mouseX/20-i*mouseY/20))); //b.setSINK(sin(radians(millis()+i*25))); //b.setSINK(sin(radians(millis()+i*random(-10,10))));//play around with values //b.setSINK(sin(radians(millis()+i*5+i%2*cos(radians(millis())))));//play around with values //b.setSINK(sin(radians(millis()+i*b.getX()))); //b.setSINK(sin(radians(millis()+float(i)*b.getX()))); //b.setSINK(sin(radians(millis()))+.9*cos(radians(b.getX()))); } } void collide() { for(int i=0; i< nlist.size(); i++) { for(int j=0; j< nlist.size(); j++)//must go from 0 not i { if(j != i) { Node n1 = (Node) nlist.get(i); Node n2 = (Node) nlist.get(j); attract(n1, n2, -1); } } } } void attract(Node n1, Node n2, float cpolarity) { float mx, my, distm, nx1, ny1; float added_d; added_d = (n1.getD()+n2.getD())/2; mx = n1.getX()-n2.getX(); my = n1.getY()-n2.getY(); distm = sqrt(mx*mx+my*my); //There can be constant with dist or /dist //nx1=n1.getX()-mx*(distm-10)/distm *.1*n2.getSINK(); //ny1=n1.getY()-my*(distm-10)/distm *.1*n2.getSINK(); nx1=n1.getX()-mx/distm *n2.getSINK()/3;//(distm); ny1=n1.getY()-my/distm *n2.getSINK()/3;//(distm);//or divide by 1 if (dist(nx1,ny1,n2.getX(),n2.getY()) > added_d) { n1.setX(nx1); n1.setY(ny1); } else { nx1=n1.getX()- mx/distm *cpolarity*added_d; ny1=n1.getY()- my/distm *cpolarity*added_d; n1.setX(nx1); n1.setY(ny1); } //I'd rather see an ellipse // if( (sq(width/2-nx1)+sq(height/2-ny1))>300 ) // { // } if( nx1 < 0) {nx1=0;n1.setX(nx1);} if( nx1 > width) {nx1=width;n1.setX(nx1);} if( ny1 < 0) {ny1=0; n1.setY(ny1);} if( ny1 > height) {ny1=height; n1.setY(ny1);} }