class organism { segment[] seg= new segment[100]; float mx; //head's x float my; //head's y float vx; float vy; organism(float mx_, float my_, float vx_, float vy_) { mx=mx_; my=my_; vx=vx_; vy=vy_; } float getMX() {return mx;} void setMX(float mx_) {mx = mx_;} float getMY() {return my;} void setMY(float my_) {my = my_;} void initialize() { for(int i=0; i< seg.length ; i=i+1) { seg[i] = new segment(mx+float(10*i),my,10,5,color(random(0,200),200,random(0,100),150)); } } void render(float ticker) { for(int i=0; i< seg.length; i=i+1) { //render segments seg[i].render(ticker); //renderspine stroke(0); if(i>0) { line(seg[i].getX(),seg[i].getY(),seg[i-1].getX(),seg[i-1].getY()); } noStroke(); } } void seek(float targetx, float targety) { float mx, my, distm, an; int i; i=0; //head seeks target mx=seg[i].getX()-targetx; // positive if 1 to the right of 2 my=seg[i].getY()-targety; //positive if 1 below 2 distm=sqrt(mx*mx+my*my); if (distm>10) { an=atan2(my,mx); seg[i].setX( seg[i].getX()-1*cos(an) ); seg[i].setY( seg[i].getY()-1*sin(an) ); } //end seeking //body follows for(i=1;i10) { seg[i].setX( seg[i].getX()-mx*(distm-10)/distm ); seg[i].setY( seg[i].getY()-my*(distm-10)/distm ); seg[i].setheading(90-an); } } }//end seek function float sumperiods() { float sum; sum=0; for(int i=0; i< seg.length; i=i+1) { sum=sum+seg[i].getP(); } return sum; } }//end of organism class