Итак, возникла следующая задача. На сфере имеются три точки, например, A, B и C, лежащие на одной сферической прямой (большой окружности). Необходимо определить, лежит ли точка C внутри отрезка AB. Помогите, пожалуйста, понять, как решать такую задачу.
Её плоский аналог решается легко. Берём те соответствующие координаты (X или Y) точек A и B, разность которых больше, затем проверяем, выполняется ли хотя бы одна из систем неравенств
или
для выбранной координаты. Если да, то точка лежит внутри отрезка, если нет, то, соответственно, не лежит. Выбирать большую координату необходимо потому, точки могут лежать на вертикальной или горизонтальной прямой и координаты будут одинаковы. Можно не выбирать координату, а проверить четыре системы неравенств:
,
,
и
и выдать положительный ответ в случае выполнения хотя бы одной из них.
Однако, такой подход не действует на сфере. Там нет такого естественного упорядочивания координат, какой есть на плоскости. Поэтому сравнивать координаты не выйдет. Можно было бы воспользоваться проверкой расстояний. То есть считать, что точка C лежит вне отрезка AB, если
. Однако, если точка C лежит внутри отрезка AB, то по идее должно выполнятся равенство
, которое является единственной альтернативой предыдущему неравенству. Но поскольку координаты представляются в компьютере числами с конечной точностью, то не только возможно ложное срабатывание, когда вместо "равно" будет "больше", но и вообще можно получить невозможное: неравенство
будет выполнено. По этой причине подход через расстояния тоже не работает.
Как быть?