Исходные данные:
1. Координаты человека в виде lon, lat (широта, долгота) на планете Земля.
2. Координаты спутника в виде alt, lon, lat (высота от Земли и координаты точки падения спутника если он будет падать по прямой на Землю).
Необходимо определять находится ли спутник на горизонте (в области видимости человека).
(Ответ да / нет).
Этапы решения задачи:
1. Переводим координаты человека и спутника в координаты (x, y, z). В системе где центр Земли это точка (0, 0, 0).
Делается это так:
Конкретно решение вот:
(Важно что это решение учитывает коэффициент приплюснутости Земли на полюсах).
Код на Питоне, но каким бы языком вы не владели думаю понять будет не сложно.
2. Далее строим касательную плоскость к Земле в точке нахождения человека.
Вот здесь пока не понятно как это делать. Тем более для точных расчетов нужно строить касательную плоскость не к сфере а к приплюснутой на полюсах сфере.
3. Проверяем по какую сторону построенной на этапе 2 плоскости находится спутник:
Вот простое решение:
Код на C++, но каким бы языком вы не владели думаю понять будет не сложно.
----------
Программа может быть написана на любом языке. (Мы будем переписывать её на 3 разных языка, т.к. разрабатываем мобильные приложения для разных платформ). Но важно, чтобы НЕ использовались математические страктуры типа классов Vector, Matrix, ... т.к. это сложно будет переписать. Нам нужна программа, которая просто оперирует многомерными массивами, чтобы было легко перенести на любой язык.
Она должна принимать на вход 5 чисел:
Человек: lon, lat
Спутник: alt, lon, lat
И выдавать ответ: "спутник в области видимости" или "спутник не в области видимости"