Nugroho's blog.: 2D/3D Ball Collision

## Tuesday, November 13, 2012

### 2D/3D Ball Collision

I used on 1D collission problem where, in case of elastic collision, the ball is changing velocity each other. In 2D/3D case however, the collision is not always head-on collision (which is basically 1 dimension collision).

The system above's easy too solve, as simple as interchanging velocity (in elastic case).

When two balls are in non-head-on collision we could always using transposed new coordinate where both of ball center are on the new x-axis like below

On the new coordinate, we can treat the velocities along x-axis as one dimensional collision case and let go on other component (y, z) intact.

Below's snippet from python code of balls collision detection; the whole code is code of moving many ball on a box.

`###deteksi tumbukan antar bolafor i in arange(jumlah):  for j in arange(i+1,jumlah):    jarak=mag(lbola[i].pos-lbola[j].pos)    if jarak<(lbola[i].radius+lbola[j].radius):      arah=norm(lbola[j].pos-lbola[i].pos)      vi=dot(lbola[i].v,arah)      vj=dot(lbola[j].v,arah)      tukar=vj-vi      lbola[i].v=lbola[i].v+tukar*arah      lbola[j].v=lbola[j].v-tukar*arah      pantul=lbola[i].radius+lbola[j].radius-jarak      lbola[i].pos=lbola[i].pos-pantul*arah      lbola[j].pos=lbola[j].pos+pantul*arah`