есть и другие способы решения этой проблемы, но самый безопасный из известных мне:
Слегка изменить направление луча
это численно безопасно, но реализация нетак просто, как кажется.Либо поменяйте весь луч и вычислите с самого начала, либо измените где-нибудь до рассматриваемого попадания.
Вам необходимо убедиться, что вы не формируете замкнутые петли, например, по зигзагообразной схеме (чтобы вы чередовали поворот CW и CCW в некотором конусе от первоначального направления).
В случае, когда луч точно параллелен и также касается края вашего многоугольника, либо игнорируйте такой край, либо пересчитайте его дважды, либо изменитенаправление луча снова.
Изменение направления луча всегда безопасно, поскольку оно позволяет избежать сингулярностей и числовой нестабильности.
btw.Этот алгоритм внутреннего полигона, который вы используете, хорошо известен под именем Тест на попадание