Maybe you should get a book on Linear Algrebra and Analysis, the math will always get back to you if you toy around with physics.
A physics book can be helpful if you don't understand the physics part of the equations either, although all you need to know is kinematics and dynamics.
Methanet is using separated axes theorem aswell, but there is a more general form of it that works for any polygon. The idea is to project one vector onto the other and do this for one out of two objects that could be colliding.
Once you know an object is colliding you will need to check at what point (usually only one or on an axes is the other case) and resolve the collision (hecker).
Next step is contact forces, and after that avoiding tunneling (sweeped bounding rects, sweep and prune: Barraff).
The stacking objects problem.
Then making objects sleep and wake up so collision detection and integration is only run when an object moves or collides.
Next stage would be optimizing your datastructure, spacial partitioning with a quad tree for example.
Once you passed all these stages you might have a working physics engine for rigid polygon bodies.
Next stage would be adding additional constraints... soft bodies... you can go on as long as you want and try to implement reality ... ^^
Maybe this gives you more of a summary how much effort it takes to get even a basic physics engine working. And you will need math mostly everywhere, as a solid programming knowledge foundation, since you have to work with algorithms, numerical problems and know your datastructures (ie. vectors, lists ect.).
The more realistic you want it to be, the harder it gets. Anything that involves rotation is already a lot harder to do then non rotated objects (unless their circles/spheres).