2017-12-19 24 views
-1

最近、私たちはGUIインターフェースでロボットのように動作する複数の円をコード化するように割り当てられました。基本的にロボットシミュレータ。ウォールコリジョンを検出してロボットを90度回転させる方法は?

ロボットのように動作する複数の円でスポーンするコードがあります。

これは、ロボットや正方形の端部との間の壁の衝突を検出するための私の現在のコードである:

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); 
      } 
     } 
    } 
} 

b1.setXVelocity(-xVel); 

b1.setYVelocity(-yVel); 

バックから円バウンスを行うメインビットであります壁。しかし、代わりに、ボールを跳ね返るボールのように壁から跳ね返るのではなく、壁を検出して90度回転させたい。

ご協力いただけると幸いです。私はボールと呼ばれるすべてのボールのAraryListを持っています。

必要に応じて、私はソースコードを与えることができます。

これはこれまで私が行ってきたことです。しかし、私は各ボールに、そこに壁があるかどうかを検出するセンサーを取り付けておく必要があります。

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

答えて

0

あなただけの正方形の壁持つと仮定:ボールは例えば右の壁に当たった場合

を、あなたはすべてのx速度を削除し、正または負の速度を追加します。

この問題は、ロボットがマップの外側の端をちょうど回ってしまうことになります。

+0

yeahh、その奇妙な状況は、そこの壁があるかどうかを検出するサークルから出てくるセンサのように、それを行うための別の方法がないと、それを回転させますか?しかし、私はそれを行う方法がわからない –

関連する問題