Ответ CygnusX1 является стандартным тестом «точка-в-полигоне» и может быть изменен для различных систем (например, у меня есть версия, закодированная для работы на сфероиде). Главный трюк при его адаптации - это выбор направления луча. «Abitrary» - гораздо лучшее слово, чем «случайный». Для 2d евклидовой работы я бы снимал ее в направлении, параллельном одной из осей (и перпендикулярно другой). Для сферы вы используете один из полюсов. Для двумерного плоского многоугольника в 3d я бы хотел выбрать линию, перпендикулярную одной из осей.
Или я бы преобразовал свои координаты так, чтобы все вычисления были в плоскости. Это значительно упростит фактическую проверку точки на полигоне. Я думаю, что это также будет быстрее (значительно для больших полигонов и многих тестов): каждый угол полигона нужно преобразовать только один раз, но он будет использоваться в двух тестах на тест точки-полигона.