see How to bounce a ball off a randomly generated line?
see 3D Programming - Weekly : Reflecting a Vector