затык скорее всего в Math.atan2(x, y), должно быть Math.atan2(y, x)
остальное только вопрос системы координат/обозначений
upd:
мне кажется так должно быть

Код AS3:
public function reflection(force:Point):Point
{
var x:Number = force.x;
var y:Number = force.y;
var perpendicular:Number = _angle - Math.PI / 2;
var iangle:Number = Math.atan2(y, x);
var rangle:Number = 2 * perpendicular - iangle;//угол падения равен углу..
var d:Number = Math.sqrt(x * x + y * y);
return new Point(Math.cos(rangle) * d, Math.sin(rangle) * d);
}
но опять же от принятых направлений зависит