Global functions can be just as OO has any other technique. They're useful when you want to capture a common way of accessing a class. #2 of your choice can be immediately eliminated because ship isn't responsible for checking collisions. #1, creating another class, and #3 are the only possible alternatives. #1 can be eliminated if your scene is only responsible for only storing objects, not detecting whether objects collide.
I would use the third option, but it will introduce a C style function, instead of reinforce OO.