Boids Beispiel angepasst und Bug bei Null-Entfernung behoben

This commit is contained in:
ngb
2022-06-30 21:24:10 +02:00
parent 445bc29480
commit 1b5f46c771
3 changed files with 37 additions and 3 deletions

View File

@@ -82,7 +82,9 @@ public class Boid extends Creature {
alignment.add(c.getVelocity());
double distSq = position.distanceSq(c.getPosition());
if( distSq > 0 ) {
separation.add(Vector.sub(position, c.getPosition()).div(distSq));
}
boids += 1;
}

View File

@@ -45,6 +45,10 @@ public class Boids extends Zeichenmaschine {
synchronized( creatures ) {
for( Creature c : creatures ) {
c.update(creatures);
if( Double.isNaN(c.getPosition().x) ) {
pause();
break;
}
}
}
}
@@ -70,9 +74,37 @@ public class Boids extends Zeichenmaschine {
@Override
public void keyPressed() {
if( keyCode == KeyEvent.VK_G ) {
if( keyCode == KEY_G ) {
setSize(800, 800);
} else if( keyCode == KEY_C ) {
int cnt = 0;
for( Creature c : creatures ) {
Vector pos = c.getPosition();
if( pos.x >= 0 && pos.x <= width && pos.y >= 0 && pos.y <= height ) {
cnt++;
} else {
System.out.printf("Missing: %s\n", c.getPosition().toString());
}
}
System.out.printf("Screen: %dx%d\nCreatures: %d of %d\n", width, height, cnt, creatures.size());
} else if( keyCode == KEY_F ) {
setFullscreen(true);
} else if( keyCode == KEY_Q ) {
for( Creature c : creatures ) {
c.getPosition().set(width/2, height/2);
}
}
}
/*@Override
public void fullscreenChanged() {
if( creatures != null ) {
synchronized( creatures ) {
for( Creature c : creatures ) {
c.limitPosition();
}
}
}
}
*/
}

View File

@@ -28,7 +28,7 @@ public abstract class Creature extends Constants {
public abstract void update( List<Creature> creatures );
protected void limitPosition() {
public void limitPosition() {
if( position.x < 0 ) {
if( Boids.BORDER_WRAP ) {
position.x = width;