11727 # Applying Coefficient of Restitution in a collision resolution method

I have a collision resolution method in my physics engine, that goes like this:

```Vector2 n1pos = n1.NonLinearSpace != null ? n1.NonLinearPosition : n1.Position; Vector2 n2pos = n2.NonLinearSpace != null ? n2.NonLinearPosition : n2.Position; Vector2 posDiff = n2pos - n1pos; Vector2 posDiffNormal = posDiff; posDiffNormal.Normalize(); float totalRadius = n1.Radius + n2.Radius; float posDiffLength = posDiff.Length(); float interPenetration = totalRadius - posDiffLength; float averageRestitution = (n1.RestitutionCoefficient + n2.RestitutionCoefficient) / 2; Vector2 forceAmount = Vector2.Multiply(posDiffNormal, interPenetration); Vector2 n1force = ( (n1.Velocity * n1.Mass) + (n2.Velocity * n2.Mass) + n2.Mass * averageRestitution * (n2.Velocity - n1.Velocity) ) / (n1.Mass + n2.Mass); Vector2 n2force = ( (n1.Velocity * n1.Mass) + (n2.Velocity * n2.Mass) + n1.Mass * averageRestitution * (n2.Velocity - n1.Velocity) ) / (n1.Mass + n2.Mass); n1.ApplyForce(???); if (!n1.IsStatic) { n1.Position += ???; } n2.ApplyForce(???); if (!n2.IsStatic) { n2.Position += ???; } ```

Now, i can't figure out what to apply to the bodies in my engine in order to get proper coefficient of restitution working. (the ??? parts). Can someone help?

Judging by this and your other questions, you are trying to run before you can walk.

<ol> <li>You're trying to code several unfamiliar things at once, when you should be tackling them one at a time. Try setting the coefficient of restituion to 0, so that your objects act like lumps of putty. That'll be easier to code, and once you have that working you can try elastic collisions. <li>No offense, but trying to write a physics engine when you haven't studied basic physics is just masochistic. You can either sit down with a textbook or <strong>experiment</strong>, but there's simply no way to get the engine working without understanding its parts. </ol>

<li>Bullet: `restitution = body1->restitution * body2->restitution`</li> <li>Chipmunk: `restitution = body1->restitution * body2->restitution`</li> <li>Box2d: `restitution = max(body1->restitution, body2->restitution)`</li> </ul>