2016-03-23 3 views
0

Я строю простую игру для Android. И я застрял на обнаружении направления столкновения двух шаров. У меня есть движущегося мяча и фиксированный шар B. Бал A намного меньше B.Определить направление мячей после столкновения

Меня не волнует масса двух шаров. После столкновения двух шаров, мяч B исчезает, а мяч A меняет направление!

Я хочу что-то вроде этого ..

Collision of two balls

Вот мой текущий код:

private void collision(Ball a, Ball b){ 
     if(b.isVisible){ 
      double d = Math.sqrt((a.cx - b.cx)*(a.cx - b.cx) + (a.cy - b.cy)*(a.cy - b.cy)); 

      if(d <= a.radius + b.radius) { 
       b.isVisible = false; 
       if(a.dx * b.dx < 0 && a.dy * b.dy < 0){ 
        a.dx = - a.dx; 
        a.dy = - a.dy; 
        b.dx = - b.dx; 
        b.dy = - b.dy; 
       } else if(a.dx * b.dx < 0){ 
        a.dx =- b.dx; 
        a.dx = - b.dx; 
       } else if(a.dy * b.dy < 0){ 
        a.dy = - a.dy; 
        b.dy = - b.dy; 
       } else{ 
        a.dx = - a.dx; 
        a.dy = - a.dy; 
        b.dx = - b.dx; 
        b.dy = - b.dy; 
       } 
      } 

     } 

    } 

Но это просто меняет направление шара В

Итак, я найти лучшее решение. Кто-нибудь поможет? Большое спасибо!

+0

Я думаю, вы имеете в виду, что хотите ** рассчитать ** направление. Поскольку «b» исчезнет, ​​почему бы не вывести его из кода. Вам нужно вычислить угол A, ударяющий B, потому что он находится перпендикулярно этому углу, что он будет отскакивать. –

ответ

0

Я могу дать вам некоторые рекомендации для вашего случая, не вникая в уравнения.

Важными аспектами достижения цели являются точка контакта и направление движущегося шарика (обратите внимание, что ваш случай является гипотетическим, так как массы и скорости обоих шаров обычно имеют значение).

Вы можете нарисовать воображаемую касательную линию в точке контакта между двумя шарами и рассматривать ее как поверхность отражения. Имея это в виду, вы можете рассчитать угол отражения, заданный направлением движущегося шара (see the attached picture).

Смежные вопросы