This part of the physically-based modelling course notes deals with methods for preventing bodies from interpenetrating with one another. This can be broken down into two subproblems: colliding contact, where bodies are moving with some velocity toward each other, and resting contact, where bodies are resting on one another. For the colliding contact, they get around ODE difficulties by first finding the time where bodies would intersect, then stopping the simulation, and finally restarting it with velocities going in the opposite direction (with respect to the surface normal). But how do they find the point of contact? Two possible ways: one, using a sort of binary search where they rerun the simulation at successively smaller intervals until they find (approximately) the time of collision. Alternately, they could use a more advanced algorithm to directly find this time. These notes also spend a lot of time describing efficient ways of finding collisions between hierarchical bounding boxes. But I won't get into that. And they describe how to finally know if two polyhedra cross by testing each face/vertex against a pre-computed separating plane. After figuring out if two bodies collide, they still need to simulate the rebound accurately. So they describe equations to simulate this in terms of impulse. These can be weighted to mimic the loss of kinetic energy in an inelastic collision. And finally, they discuss resting contact, especially the case when two bodies become separated by an external force. Unfortunately, we require a quadratic solver to accurately solve these. And such a solver is hard to find, and hard to program.