Новая скорость после кругового столкновения - PullRequest
4 голосов
/ 08 декабря 2011

На круглом бильярдном столе бильярдный шар сталкивается с границей этого стола с некоторой скоростью 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). Симуляция без трения .

Ответы [ 2 ]

3 голосов
/ 08 декабря 2011

Предполагая, что вы выполняете простое (похожее на игру) моделирование бильярда, вы можете использовать что-то вроде:

v_new = coeff*(v_old - 2*dot(v_old, boundary_normal)*boundary_normal);

Здесь v_old - ваш текущий вектор скорости, а boundary_normal - нормаль, указывающая внутрьвашего круглого бильярдного стола в точке удара.Если вы знаете центр c вашего круглого стола и у вас есть точка удара p, тогда нормаль будет просто normalize(c-p).То есть нормализованный вектор, который вы получаете при вычитании p из c.

Теперь я взял coeff как коэффициент выдумки между 0 (вообще никакой скорости после удара) и 1 (та же скорость после удара).Вы можете сделать это более физически правдоподобным, определив правильный коэффициент реституции.

В конце концов, вся формула, приведенная выше, проста: отражение , как вы, например, могли видеть в базовом трассировщике лучей.Как уже говорилось, это довольно грубая абстракция от точного моделирования физики, но, скорее всего, сделает эту работу.

0 голосов
/ 08 декабря 2011

Как говорится в комментариях, это вопрос механики.Взгляните на определение импульс .То, что вы хотите, в частности, рассматривается в разделе Упругие столкновения .

...