обозначим:
body1.m_position - координата центра масс 1-го тела, вектор
body2.m_position - координата центра масс 2-го тела, вектор
col_position - координата точки столкновения, вектор
body*.m_linearVelocity - линейная скорость центра масс, вектор
body*.m_angularVelocity - угловая скорость тела, число

Код:
//посчитаем 2 вспомогательных вектора
m1.x=body1.m_position.x-col_position.x;
m1.y=body1.m_position.y-col_position.y;
m2.x=body2.m_position.x-col_position.x;
m2.y=body2.m_position.y-col_position.y;
//теперь посчитаем линейные скорости тел в точке удара
//вклад от вращательного движения
v1.x=m1.y*body1.m_angularVelocity*2*Math.PI;
v1.y=-m1.x*body1.m_angularVelocity*2*Math.PI;
v2.x=m2.y*body2.m_angularVelocity*2*Math.PI;
v2.y=-m2.x*body2.m_angularVelocity*2*Math.PI;
//вклад от поступательного движения
v1.x+=body1.m_linearVelocity.x;
v1.y+=body1.m_linearVelocity.y;
v2.x+=body2.m_linearVelocity.x;
v2.y+=body2.m_linearVelocity.y;
//импульсы тел считаем как-будто вся масса тел сосредоточена в точке удара
p1.x=v1.x*body1.m_mass;
p1.y=v1.y*body1.m_mass;
p2.x=v2.x*body2.m_mass;
p2.y=v2.y*body2.m_mass;
//и наконец сила удара
health=Math.sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));
код писал не проверяя, так что могут быть ошибки.
Цитата:
|
А к квадратам и др. некруглым телам тоже самое? У них вроде касательной нет.
|
Касательная строится не к форме тела, а к окружности с центром в центре масс тела и проходящей через точку столкновения (см. рисунок)