2015-05-21 2 views
0

Попытка получить два шара, чтобы столкнуться и отскочить назад под соответствующими углами. Когда шары сталкиваются, однако они застревают вместе, и я понятия не имею, что я здесь делаю неправильно.2D простой вектор столкновения шара

Я звоню эту checkCollision() функцию в моей одушевленной функции Очевидно cx является ball1 xpos, cx2 является ball2 xpos. То же самое для cy.

function checkCollision() { 
    var dx = cx2 - cx; // distance between x 
    var dy = cy2 - cy; // distance between y 
    var distance = Math.sqrt(dx * dx + dy * dy); 

    if (distance < (radius1 + radius2)) { 
     // Collision detected. Find the normal. 
     var normalX = dx/distance; 
     var normalY = dy/distance; 

     //find the middle point of the distance 
     var midpointX = (cx + cx2)/2; 
     var midpointY = (cy + cy2)/2; 

     //bounce back 
     cx = midpointX - radius1*normalX; 
     cy = midpointY - radius1*normalY; 
     cx2 = midpointX - radius2*normalX; 
     cy2 = midpointY - radius2*normalY; 

     var dVector = (vx - vx2) * normalX; 
     dVector += (vy - vy2) * normalY; 

     var dvx = dVector * normalX; 
     var dvy = dVector * normalY; 

     vx -= dvx; 
     vy -= dvy; 
     vx2 += dvx; 
     vy2 += dvy; 
    } 
    ... 

Я никогда не делал много работы. Есть ли более простой способ сделать это? Как бы я написал это с помощью углов?

+0

Почему вы вычитаете скорость нормального вектора из текущей скорости? Разве вы не должны просто установить скорость, равную скорости нормального вектора? Подобно этому 'vx = dvx; vy = dvy; ' – mpallansch

+0

Возможно, ваши шары застряли в бесконечном столкновении (ничего себе, это звучало странно). – Niddro

+0

ну честно @mpadittech Я не на 100%, мой друг помог мне написать, что это не моя сильная сторона, я пробовал свой путь, и шары застряли на столкновении, хотя. – joshuaaron

ответ

0

Для определения пересечения между двумя кругами вам необходимо использовать некоторые основные математические данные.

Аналогичная проблема описана здесь:

algorithm to detect if a Circles intersect with any other circle in the same plane

Существует # образец C, который может быть легко адаптирована к JavaScript.