, , angular . m1, m2 , p1 = (p1x, p1y), p2 = (p2x, p2y) , u1, u2 - v1, v2 - . ,
0 = m1*(u1-v1)+m2*(u2-v2)
0 = m1*cross(p1,u1-v1)+m2*cross(p2,u2-v2)
0 = m1*dot(u1-v1,u1+v1)+m2*dot(u2-v2,u2+v2)
u2-v2,
0 = m1*cross(p1-p2,u1-v1)
0 = m1*dot(u1-v1,u1+v1-u2-v2)
, (u1-v1) , , (u2-v2) (p1-p2), , . a,
u1-v1 = m2*a*(p1-p2)
u2-v2 = m1*a*(p2-p1)
0 = dot(m2*a*(p1-p2), 2*u1-m2*a*(p1-p2)-2*u2+m1*a*(p2-p1))
a
2 * dot(p1-p2, u1-u2) = (m1+m2) * dot(p1-p2,p1-p2) * a
,
b = dot(p1-p2, u1-u2) / dot(p1-p2, p1-p2)
a = 2/(m1+m2) * b
v1 = u1 - 2 * m2/(m1+m2) * b * (p1-p2)
v2 = u2 - 2 * m1/(m1+m2) * b * (p2-p1)
, u2 = 0, m2 , v2 = u2 = 0
v1 = u1 - 2 * dot (p1-p2, u1)/dot (p1-p2, p1-p2) * (p1-p2)
.. v1 u1 , (p1-p2) . , norm(p1-p2)=r1+r2
dot(p1-p2, p1-p2) = (r1+r2)^2
.
oc{x,y} , sc{x,y} {vx,vy} .
dc={sc.x-oc.x, sc.y-oc.y} dist2=dc.x*dc.x+dc.y*dc.y
1.a , sqrt(dist2) sc.radius+oc.radius. , . , dist2 .
dot = dc.x*vx+dcy*vy dot = dot/dist2
vx = vx - 2*dot*dc.x, vy = vy - 2*dot*dc.y
, , dc.y==0, oc.y==sc.y dot=vx/dc.x, vx=-vx, vy=vy .