2017-12-19 7 views
-1

So wurden wir vor kurzem damit beauftragt, mehrere Kreise zu codieren, die sich wie Roboter in einer GUI-Schnittstelle verhalten. Grundsätzlich ein Robotersimulator.Wie erkennt man die Wandkollision und rotiert den Roboter um 90 Grad?

Ich habe den Code in mehreren Kreisen spawnen, die wie Roboter agieren können.

Dies ist mein aktueller Code für Wand Kollision zwischen dem Roboter zu erfassen und dem Ende des Platzes:

private void checkCollisions(double maxX, double maxY) { 

for (ListIterator<Ball> slowIt = balls.listIterator(); slowIt.hasNext();) { 
     Ball b1 = slowIt.next(); 
     // check wall collisions: 
     double xVel = b1.getXVelocity(); 
     double yVel = b1.getYVelocity(); 
     if ((b1.getCenterX() - b1.getRadius() <= 0 && xVel < 0) 
       || (b1.getCenterX() + b1.getRadius() >= maxX && xVel > 0)) { 
      b1.setXVelocity(-xVel); 
     } 
     if ((b1.getCenterY() - b1.getRadius() <= 0 && yVel < 0) 
       || (b1.getCenterY() + b1.getRadius() >= maxY && yVel > 0)) { 
      b1.setYVelocity(-yVel); 
     } 
     for (ListIterator<Ball> fastIt = balls.listIterator(slowIt.nextIndex()); fastIt.hasNext();) { 
      Ball b2 = fastIt.next(); 

      final double deltaX = b2.getCenterX() - b1.getCenterX() ; 
      final double deltaY = b2.getCenterY() - b1.getCenterY() ; 
      if (colliding(b1, b2, deltaX, deltaY)) { 
       bounce(b1, b2, deltaX, deltaY); 
      } 
     } 
    } 
} 

Die

b1.setXVelocity(-xVel); 

b1.setYVelocity(-yVel); 

sind die wichtigsten Bits, die den Kreis zurückprallen von dem machen Mauer. Aber stattdessen möchte ich, dass der Ball die Wand erkennt und sich um 90 Grad dreht, anstatt wie ein springender Ball von der Wand zurück zu springen.

Jede Hilfe wird voll und ganz geschätzt oder ein funktionierender Code, der das für mich tun kann. Ich habe eine AryListe aller Bälle, die "Bälle" genannt werden.

Bei Bedarf kann ich Quellcode geben.

Das ist was ich bisher habe. Aber ich brauche jeden Ball, an dem ein Sensor angebracht ist, der erkennt, ob dort eine Wand steht.

https://i.stack.imgur.com/XsQvX.png

Antwort

0

Angenommen, Sie haben nur Platz Wände:

Wenn der Ball die rechte Wand zum Beispiel trifft, wollen Sie alle x Geschwindigkeit zu entfernen, und fügen Sie dann entweder positive oder negative Geschwindigkeit.

Das Problem damit ist, dass der Roboter am Ende nur um die Außenkanten der Karte gehen wird.

+0

yeahh, es ist eine seltsame Situation, es sei denn, es gibt eine andere Art, es mit einem Sensor zu tun, der aus dem Kreis kommt, der erkennt, ob eine Wand davor ist, und so rotiert es? aber ich bin mir nicht sicher, wie ich das machen soll –

Verwandte Themen