class Vogel { //properties int number; //birds name or number int feldX; //current feld colum int feldY; //current feld row float posX; float posY; float dirAngle; //direction in degree float speed; // speed color farbe; int vogelSize; //strokeWeight boolean closeToDebugBird; //contructor Vogel(int n) { setNumber(n); setPosition( random(width), random(height) ); setFeld(); setDirection( random(360) ); setSpeed(random(1,3)); setColor(200); vogelSize=3; } Vogel(int numb, float minSpeed, float maxSpeed, int birdSize, color c) { setNumber(numb); setPosition( random(width), random(height) ); setFeld(); setDirection( random(360) ); setSpeed(random(minSpeed,maxSpeed)); setColor(c); vogelSize=birdSize; } //methods void setNumber(int n) { number = n; } int getNumber() { return number; } boolean getCloseToDebugBird() { return closeToDebugBird; } void setCloseToDebugBird(boolean b) { closeToDebugBird = b; } void setVogelSize(int s) { vogelSize = s; } void setColor(color f) { farbe = f; } color getColor() { return farbe; } void setFeld() { feldX = floor (colums *getPositionX() /width); feldY = floor ( rows *getPositionY() /height); } int getFeldX() { return feldX; } int getFeldY() { return feldY; } void setPosition(float x, float y) { posX = x; posY = y; } float getPositionX() { return posX; } float getPositionY() { return posY; } void setDirection(float angle) { dirAngle = angle; } float getDirection() { return dirAngle; } void setSpeed(float s) { speed = s; } float getSpeed() { return speed; } void drawVogel() { stroke(getColor()); strokeWeight(vogelSize); point( getPositionX(), getPositionY() ); } int[] getClosestNeighbours() //return an int array of all birds in the neighbourhood (numbers) { int myX = getFeldX(); int myY = getFeldY(); int minX = myX -1; int maxX = myX +1; int minY = myY -1; int maxY = myY +1; int[] tempListe = new int[0]; if (minX<0) minX = 0; if (maxX>colums-1) maxX = colums-1; if (minY<0) minY = 0; if (maxY>rows-1) maxY = rows-1; for (int i=minX; i<=maxX; i++) { for (int k=minY; k<=maxY; k++) { tempListe = concat(tempListe, feld[i][k].getVogelliste()); } } return tempListe; } void adaptDirection(int[] neighbours) { float[][] distList = new float[neighbours.length][2]; //collection list of neigbours and their distance float myX = getPositionX(); float myY = getPositionY(); for (int i=0; i distList.length) laufweite = distList.length; float avDirAngle = 0; float avSpeed = 0; for (int i=0; i x) j--; //springr zurück, bis element kleiner als pivot if (i<=j) { float tmp=a[i][0]; a[i][0]=a[j][0]; a[j][0]=tmp; //tausche element i gegebn j tmp=a[i][1]; a[i][1]=a[j][1]; a[j][1]=tmp; //tausche element i gegebn j i++; j--; } } while (i<=j); if (unten < j) arrayQuickSort(a, unten, j); //rekursiv 'unterer' rest if (i < oben) arrayQuickSort(a, i, oben); //rekursiv 'oberer' rest } void fly() { float rad = radians(getDirection()); float x = getPositionX() +sin(rad) * getSpeed(); float y = getPositionY() +cos(rad) * getSpeed(); x = (x+width) % (float)width; y = (y+height) % (float) height; setPosition(x, y); } }