На самом деле, обычные подходы к трассировке лучей и правилу намотки прекрасно работают на поверхности сферы, с небольшой корректировкой.
На поверхности сферы «прямая линия» представляет собой большой круг, и расстояния измеряются в угловых единицах, а не в метрах или дюймах.Чтобы нарисовать луч из произвольной точки на поверхности сферы, просто сформируйте большой круг через эту произвольную точку и любую другую точку на поверхности сферы.Чтобы сохранить математику в чистоте, выберите вторую точку около pi / 2 от точки, местоположение которой вы тестируете.Примените обычное четно-нечетное правило к большому кругу и вашему тестовому многоугольнику.
Правило намотки также переводит прямо с прямых линий на плоскости (сегменты) больших кругов на сфере.
Все, что вам сейчас нужно, это реализации Java базовых операций сферической геометрии.У меня нет никаких рекомендаций на этот счет, но я думаю, что Интернет поможет.Поскольку математика начинается с Mathworld .
Другой подход состоял бы в том, чтобы проецировать ваши точки и многоугольники с поверхности сферы на плоскость - то, что делают проекции карты - топологическуюотношения внутри не будут затронуты таким преобразованием.
О, и вам придется решить, что делать, если ваш многоугольник описывает большой круг