I detect a collision between some object and another, and I get a normal to the surface where the collision occured, and the point of that collision. I try to sort of pretend that the velocity vector of the colliding object and the surface normal make like an 'angle of incidence'. And then I go farther and deal with that whole dealiothingy in put it into the context of a polar system sort of. Looks like this (multiplication operator does dot product):

So, basically my logic is like this. It's wrong I guess, because the ball goes all over the place unpredictably after the collision, but, it's my logic.Code:double incidence = std::acos( -v_ball.getNormalized() * normal ); // Into polar (theta, radius) form double theta = std::acos( -v_ball.getNormalized() * CVector(1, 0) ) + incidence * 2; double radius = v_ball.length(); // Into cartesian x, y form CVector out = CVector( std::cos( theta ) * radius, std::sin( theta ) * radius ); m_ball.setVelocity( out );