Это просто, но грязно.
Поскольку вы работаете в ECEF, возможно, у вас есть начало луча (x, y, z) и вектор направления (u, v, w) в координатах ECEF. На данный момент давайте предположим, что во время путешествия к поверхности Земли, Земля не движется заметно. (Самая быстрая часть вращающейся земли, Экватор, движется со скоростью около 0,45 км / с, а свет движется со скоростью около 300 000 км / с, поэтому луч, исходящий, скажем, на 1000 км над землей и направленный более или менее прямо вниз к экватору, примет 1/300 секунды, чтобы добраться до него, в течение которого Экватор продвинется на 1,5 метра: это, вероятно, допустимая ошибка.)
Нам нужно только вычислить пересечение параметризованной линии
t --> (x,y,z) + t*(u,v,w)
с земной поверхностью, которую можно считать нулевым набором функции
(x/a)^2 + (y/a)^2 + (z/b)^2 - 1
где a - большая полуось (6 378 137 метров), а b - малая ось эллипсоида WGS84 (6 356 752,3142 метра). Вставьте первую формулу во вторую и решите для t в терминах x, y, z, u, v, w . Это квадратное уравнение, поэтому вы получаете до двух решений: одно для входа на Землю и другое для ее повторного ухода (что могло бы произойти, например, для нейтрино). Выберите решение, для которого расстояние самое короткое. Это дает
t = -(1/(b^2 (u^2 + v^2) + a^2 w^2)) * (b^2 (u x + v y) + a^2 w z + 1/2 Sqrt[
4 (b^2 (u x + v y) + a^2 w z)^2 -
4 (b^2 (u^2 + v^2) + a^2 w^2) (b^2 (-a^2 + x^2 + y^2) + a^2 z^2)])
Вставьте это значение в первое уравнение, чтобы получить точку пересечения.
Для луча, исходящего далеко, но не очень далеко ( например, от Солнца, но не из-за пределов Солнечной системы), начните с грубой оценки времени T, которое требуется для достижения Земли (в секундах): вы могли бы например, используйте расстояние от (x, y, z) до центра земли. Измените начальные координаты (x, y, z), чтобы учесть величину вращения Земли за это время: это изменит начальные координаты на
(x*c + y*s, -x*s + y*c, z)
(кажется, что точка сместится назад ) где c и s - синус и косинус 0,000072921150 * T радиан . Вычислить пересечение для луча, начиная с этого обновленного местоположения. Вы можете быть на 10 метров или около того из-за использования расчетного времени. Если это имеет значение, повторно оценить прошедшее время , основываясь на этой точке пересечения и повторить вычисление с новым значением Т .