На круглом бильярдном столе бильярдный шар сталкивается с границей этого стола с некоторой скоростью v1. Это столкновение обнаруживается следующим образом:
double s = sqrt( (p.x-a)*(p.x-a) + (p.y-b)*(p.y-b) );
if (s<r) // point lies inside circle
// do nothing
else if (s==r) // point lies on circle
// calculate new velocity
else if (s>r) // point lies outside circle
// move point back onto circle (I already have that part)
// calculate new velocity
Теперь как можно рассчитать новую скорость v2 после столкновения, чтобы угол падения = угол отражения (упругое столкновение)?
PS: Бильярдный шар представлен точкой p (x, y) с вектором скорости v (x, y). Симуляция без трения.
v_new = coeff*(v_old - 2*dot(v_old, boundary_normal)*boundary_normal);
для серьезно упрощенной физики? - person Bart   schedule 08.12.2011