Пересечение полигона с лучом - тривиальная задача, тут гугл в помощь, наподобие
вот этого, например, или
вот этого.
Другое дело, что полигонов подразумевается огромное количество, перебирать их за линейное время не хорошо, поэтому обычно строят древовидную структуру (для поиска столкновений за логарифмическое время). Например,
BSP-дерево, или
kd-дерево