Я предлагаю вам взглянуть на это:
http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/
Вопрос 1E решает вашу проблема пересечения двух больших кругов. Отсюда вы можете определить основные операции ваших фигур на сфере без большой зависимости, такой как CGAL или GEOS.
Если вы хотите выполнить общую операцию с множеством полигонов, такую как объединение / пересечение и т. Д., Вы можете заглянуть в общую библиотеку обрезки полигонов из http://www.cs.man.ac.uk/~toby/alan / software /
Для нахождения пересечения двух объектов обычно требуется задать уравнения, определяющие объекты, равными друг другу.
Вот один из способов, который, возможно, является просто другой формулировкой ответа Витора.
Начните с определения каждой линии (дуги) как параметрического уравнения. К лучшему или худшему, я вижу эти дуги как путь, который нормализованные векторы проходят при вращении. Вот как я их определяю (наверняка есть лучший способ).
Итак, я бы взял начальную и конечную точки, рассматривал их как векторы, взял бы их перекрестное произведение, чтобы получить ось вращения, и точечное произведение, чтобы получить угол.
Таким образом, мое уравнение для дуги будет выглядеть так
arc(t) = startPoint * (axisAngleToRotationMatrix (axis, t * angle))
Затем вы установите уравнения двух дуг равными друг другу и решите систему уравнений, которая получится, для "t" в каждом уравнении.