can you explain this code?

int collision_coins(int i ,int j,class coin_state * coins)
{
        float x1 = coins[i].center_x;
        float y1 = coins[i].center_y;
        float x2 = coins[j].center_x;
        float y2 = coins[j].center_y;

        float vx1 = coins[i].vel_x;
        float vy1 = coins[i].vel_y;
        float vx2 = coins[j].vel_x;
        float vy2 = coins[j].vel_y;

        float rad1 = coins[i].rad_f;
        float rad2 = coins[j].rad_f;

        float mass1 = coins[i].mass;
        float mass2 = coins[j].mass;

        if(((vx1==vx2)&&(vy1==vy2)))
        {
                return 0;       //Not possible due to equal velocities
        }

        float  dist_centres = sqrt(((x1 - x2)*(x1 - x2))  + ((y1 - y2)*(y1 - y2)));

        if(dist_centres  > rad1 + rad2)
        {
                return 0 ; //Not possible due to insufficient distance
        }
        else
        {

              float u1 = ((x2 - x1)*(vx1) + (y2 - y1) *(vy1))/dist_centres;
              float u2 = ((x1 - x2)*(vx2) + (y1 - y2) *(vy2)) / dist_centres;

              float vr1 = ( mass2 * (RESTITUITION * (u1 + u2) ) + mass2 * u2 - mass1 * u1)/(mass1 + mass2);
              float vr2 = ( mass1 * (RESTITUITION * (u2 + u1 ) ) + mass1 * u1  - mass2 * u2 )/(mass1 + mass2);

              if(u1 + u2 > 0.00)
              {
                 float vr1x_i =( (x2 - x1) * (u1) )/ dist_centres ;
                 float vr1y_i =( (y2 - y1) * (u1) )/ dist_centres ;
                 float vr2x_i =( (x1 - x2) * (u2) )/ dist_centres ;
   Avoid using the following keywords: vr1y_i, =, y2)*(y1, rad2
user