/* * Klasse Agent * * bewegt und stellt den Agenten innerhalb des Feldes dar * berechnet den abstand eines agenten zu den wegen * findet die anzahl bestimmter agenten in der nähe * findet die blume die am nächsten ist * */ class Agent { float xPos; // ALLE float yPos; // Eigenschaften float friction; // der float speed; // Klasse float angle; float torkeln; boolean loaded = false; int aufgenommen = 0; color meineFarbe; int meineID; float distance; int outofbound=0; Agent() { } Agent(float x, float y,float s, float a, float to) { xPos = x; yPos = y; speed = s; angle = a; torkeln = to; } //Methode - prallt vom Rand ab void randCollision() { if(xPos > screen_x-bildRand) { angle=-angle; }else if(xPos < bildRand){ angle=-angle; } if(yPos > screen_y-bildRand) { angle=180-angle; }else if(yPos < bildRand){ angle=180-angle; } if(yPos>screen_y-bildRand || yPosscreen_x-bildRand) { outofbound+=1; if(outofbound>1000){ //saveFrame("line-####.tif"); //println("war ausserhalb"); xPos=screen_x/2; yPos=screen_y/2; } }else{outofbound=0;} } // Methode - berechnet die distanzen eines agenten zu den wegen float calcDistance(float x1, float y1) { float currMin=0; int localindex = 0; xPos = x1; yPos = y1; for (int x=0; x < (int)wegeListe.size(); x++) { float epX = ((Wege)wegeListe.get(x)).endX(); float epY = ((Wege)wegeListe.get(x)).endY(); float spX = ((Wege)wegeListe.get(x)).startX(); float spY = ((Wege)wegeListe.get(x)).startY(); float a = spX - epX; float b = spY - epY; distance = sqrt(sq(xPos-( (xPos*sq(a) + (yPos - epY)*a*b + epX*sq(b)) / (sq(a)+sq(b)) )) + sq(yPos-( ((b*(xPos*sq(a) + (yPos - epY)*a*b + epX*sq(b))) / (a*(sq(a)+sq(b)))) - epX*b/a + epY ))); //println(meineID+" "+epX+" "+epY+" "+spX+" "+spY+" "+distance); if(distance abstand) return null; else return (BlumenObj) blumenListe.get(index); } float getX() { return xPos; } float getY() { return yPos; } color getColor() { return meineFarbe; } float getSpeed() { return speed; } }