Об полетах на околоземной орбите у себя дома перед монитором и как я это делал
Invite pending
Иногда я вижу сны в которых летаю. И после прочтения топика О космической Доброте мне захотелось полетать на яву хоть и виртуально но с настоящими снимками со спутника ЭлектроЛ. Эта публикация о том как я это делал.
Я написал программку которая берет за основу снимки с космоса и отображает их на шар.
Готового алгоритма преобразования изображения со спутника на землю не смог найти, хотя долго искал, поэтому сделал свой.
Наша моделька:
Точка 1 — Спутник с координатами x1,y1,z1
Коричневая плоскость — снимок. Точки снимка имеют координаты x2,y2,z2
Голубой Шар — земля… Снимок на него проецируется по координатам x,y,z. (без индексов)
Зеленая линия — квант луча долетевший до спутника.
То есть нам нужно найти функцию проецирования точек снимка на шар: X(x2,y2), Y(x2,y2), Z(x2,y2)
Шар задается уравнением
x^2+y^2+z^2=1; где за 1 принимаем радиус земли чтобы упростить расчеты уже на этом этапе.
Уравнения линии:
(z-z1)/(1-z1)=t
y/y2=t
x/x2=t
Отсюда
z=z1 + t — t*z1
y=y2*t
x=x2*t
Осталось подставить в формулу шара:
x2^2*t^2+y2^2*t^2+(z1+t-t*z1)^2 = 1
и найти t:
t1 = (-z1+z1^2+sqrt(z1^2+x2^2-x2^2*z1^2+y2^2-y2^2*z1^2+1-2*z1))/(x2^2+y2^2+1-2*z1+z1^2)
t2= -(z1-z1^2+sqrt(z1^2+x2^2-x2^2*z1^2+y2^2-y2^2*z1^2+1-2*z1))/(x2^2+y2^2+1-2*z1+z1^2)
t1 отвечает точкам с обратной стороны земли и он нам не нужен.
Теперь можно подставить t и найти координаты проецируемой точки.
Осталось поставить координаты спутника:
Расстояние от земли до спутника на орбитальной орбите 35786 км
Радиус земли 6378.1км
z1=35786/6378.1+1
Моделирование дает вот такую проекцию:
Далее я сделал программу просмотра таких снимков.
Здесь вы можете посмотреть как это работает:
О самих снимках: RGB изображения доступны в качестве 120MPix. Rрасный канал захватывает и инфракрасную область, от этого снимки выглядят неестественно… Очень хотелось бы увидеть спектральные чувствительности используемых фильтров. Я мог бы чтобы попробовать свести изображения в естественных цветах.
Я написал программку которая берет за основу снимки с космоса и отображает их на шар.
Готового алгоритма преобразования изображения со спутника на землю не смог найти, хотя долго искал, поэтому сделал свой.
Наша моделька:
Точка 1 — Спутник с координатами x1,y1,z1
Коричневая плоскость — снимок. Точки снимка имеют координаты x2,y2,z2
Голубой Шар — земля… Снимок на него проецируется по координатам x,y,z. (без индексов)
Зеленая линия — квант луча долетевший до спутника.
То есть нам нужно найти функцию проецирования точек снимка на шар: X(x2,y2), Y(x2,y2), Z(x2,y2)
Шар задается уравнением
x^2+y^2+z^2=1; где за 1 принимаем радиус земли чтобы упростить расчеты уже на этом этапе.
Уравнения линии:
(z-z1)/(1-z1)=t
y/y2=t
x/x2=t
Отсюда
z=z1 + t — t*z1
y=y2*t
x=x2*t
Осталось подставить в формулу шара:
x2^2*t^2+y2^2*t^2+(z1+t-t*z1)^2 = 1
и найти t:
t1 = (-z1+z1^2+sqrt(z1^2+x2^2-x2^2*z1^2+y2^2-y2^2*z1^2+1-2*z1))/(x2^2+y2^2+1-2*z1+z1^2)
t2= -(z1-z1^2+sqrt(z1^2+x2^2-x2^2*z1^2+y2^2-y2^2*z1^2+1-2*z1))/(x2^2+y2^2+1-2*z1+z1^2)
t1 отвечает точкам с обратной стороны земли и он нам не нужен.
Теперь можно подставить t и найти координаты проецируемой точки.
Осталось поставить координаты спутника:
Расстояние от земли до спутника на орбитальной орбите 35786 км
Радиус земли 6378.1км
z1=35786/6378.1+1
Моделирование дает вот такую проекцию:
Далее я сделал программу просмотра таких снимков.
Здесь вы можете посмотреть как это работает:
О самих снимках: RGB изображения доступны в качестве 120MPix. Rрасный канал захватывает и инфракрасную область, от этого снимки выглядят неестественно… Очень хотелось бы увидеть спектральные чувствительности используемых фильтров. Я мог бы чтобы попробовать свести изображения в естественных цветах.