2017-12-19 27 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, 그것의 이상한 상황이 그것의 infront 벽이 있는지 감지하는 원에서 나오는 센서와 같이 그것을 할 다른 방법이 없다면 이상한 상황, 그래서 그것을 회전? 하지만 어떻게해야할지 모르겠다. –