есть и другие способы решения этой проблемы, но самый безопасный, который я знаю, это
Слегка измените направление лучей
это численно безопасно, но реализация не так проста, как кажется. Либо измените весь луч и вычислите с самого начала, либо измените где-нибудь перед рассматриваемым попаданием.
![изменить направление луча](https://i.stack.imgur.com/ogBU2.png)
Вы должны убедиться, что вы не образуете тесные петли, например, зигзагообразным рисунком (таким образом, вы чередуете повороты CW и CCW в пределах некоторого конуса от исходного направления).
В случае, когда луч точно параллелен и также касается края вашего многоугольника, либо игнорируйте такое ребро, либо посчитайте его дважды, либо снова измените направление луча.
Изменение направления луча всегда безопасно, поскольку позволяет избежать сингулярностей и численной нестабильности.
Кстати. Этот алгоритм внутри многоугольника, который вы используете, хорошо известен под названием Hit test.
person
Spektre
schedule
10.10.2018