FINALLY FIXED the Intersector issue!
Apparently the last problem that contributed to this bug, was that the "sides" value in the Ball and Obstacle class was an int. Retrieving the theta value required dividing an int "_sides" by "sides", and since int / int = int, the result was the vectors always being skewed to the nearest integer. The type of "sides" is now a float, not an int :)