2017-11-09 5 views
0

나는 바운스하는 공을 만드는 프로그램이있다. 두 개의 볼이 충돌하면 두 개의 작은 볼로 나뉘어져 다른 방향으로 움직입니다.Java. 충돌 후 분열하여 다른 방향으로 움직이는 공

이 나는 ​​그들이 즉시하지 않습니다 다시 충돌 있도록 작은 공을 배치 할 위치를 결정하는 데 도움이됩니다 충돌

public boolean intersects (Ball b) { 
     double distance = Math.sqrt(Math.pow((this.x - b.x), 2) + Math.pow((this.y - b.y), 2)); 
     if (this.size/2 + b.size/2 >= distance && !(this.equals(b))) { 
      return true; 
     } else return false; 

내가 아이디어를 찾고 있어요, 처리하는 방법이다. 나는 다른 기동을 시도했으나 모두가 너무 가까워서 모두가 튀는 것을 시작하고 혼돈이됩니다. 여기

는 볼이 충돌 할 때 내가, 내가 두 볼 개체가 순간

b.x = b.x + b.dx; 
b.y = b.y + b.dy; 

를 다음을 수행 공을 이동하려면 클래스 볼

public Ball(double x, double y, double size, double dx, double dy) { 
    this.x = x; 
    this.y = y; 
    this.size = size; 
    this.dx = dx; 
    this.dy = dy; 

입니다. 나는 그들의 중심의 좌표를 알고 x, y, 속도 dx 나는 기본적으로 필요 원인있는 그들이,

내가보기를 처리하는 코드를 생략 y 축을 따라 x 축과 속도 dy를 따라 이동 해결 방법, dx, dy, xy을 4 개의 볼에 대해 변경하여 모두가 서로 멀어지고 즉시 충돌하지 않도록합니다.

저는 코드 솔루션이 아니라 일반적인 아이디어가 필요합니다.

답변

0

두 가지 문제가있을 수 있습니다. 첫 번째는 네 개의 "새로운"볼이 모두 충돌 지점에서 시작하거나 충돌 지점 근처에서 시작하고 충돌 감지기가 즉시 충돌로 인식 할 수 있습니다. 이를 해결하기 위해 "새로운"볼을 충돌 탐지기의 1 펄스 또는 2 펄스 동안 서로 충돌 할 수 없다고 표시 할 수 있습니다. 더 나은 솔루션을 제공하는 코드가 필요합니다.

둘째, 네 개의 "새로운"볼의 결과 벡터를 무작위로 지정하려고합니다. dx와 dy를 무작위로 설정하면 충분합니다.

+0

두 번째 제안은 실제로 나에게 아이디어를 제공합니다. 교차점의 포인트 (좌표)를 얻으면 그 점 둘레에 4 개의 볼을 배치하고 그 위에 놓인 dx와 dy를 설정할 수 있습니다. 왜냐하면 지금 현재 공의 이전 방향에 따라 dx를 변경하지만, 다른 공의 위치를 ​​고려하지 않기 때문입니다. – Diana