Копирую сюда из Лунотрепа (в Лунотрепе удалю):
codegrinder
16 Август 2009, 18:20:31
Поскольку тема в пользовательских заблокирована, напишу здесь.
Если вкратце, то я попытался выяснить высоту горизонта на западе над истинным. И у меня получилась полная ерунда. Если я нигде серьёзно не ошибся, то это строгое математическое доказательство что фотографии с Луны - поддельные. Так что излагаю.
1. Я написал программу которая проецирует координаты в пространстве на плоское окно (т.е. строит плоское изображение по точкам в пространстве). Наиболее интересный кусок кода приведу ниже.
2.
http://history.nasa.…5453HR.jpg (1.1 МБ).
Берём эту фотку и выделяем на ней 3 точки на кратере, которые определяют прямоугольник описанный вокруг кратера. Одна точка находится слева внизу на кратере, вторая примерно на середине справа, третья примерно на середине вверху.
3. Берем последнюю фотку с LROC и поворачиваем её так чтобы яма была над LM (это нужно для программы, т.к. она ничего не вращает). У меня получилось примерно следующее:
http://s56.radikal.r…3e90dc.png.
4. Находим на получившейся картинке координаты наших трех точек относительно LM и заносим их в программу (см. исходный код программы ниже).
5. Подбираем значения высоты ближней и дальней стенки кратера чтобы получить соотношение сторон прямоугольника в который они вписаны как на фотографии. Получаем
http://i002.radikal.…d6e6d8.png6. Обращаем внимание на угол между горизонталью на высоте 5,5 м и горизонтом на фото - 13, 5 градусов и горизонт выше горизонтали. Рассматриваем фотографии с места посадки A11. Такой большой угол должен быть вполне заметен. Я лично его там не вижу. А если судить по довольно ровному горизонту, то получается ерунда, очень маловероятно что LM сел именно в такой точке низины довольно сложной формы, что горизонт получился ровным.
Исходный код отрисовки "кратера" с расчётом положения точек и горизонта:
void onPaint(HDC hdc, int cx, int cy)
{
HBRUSH brush = CreateSolidBrush(0xffffff);
RECT rc = { 0, 0, cx, cy };
FillRect(hdc, &rc, brush);
DeleteObject(brush);
struct
{
int x, y, z;
int xs, ys;
int horz;
}
points[] =
{
{ -600*256/286, 2300*256/286, gNearHeight-gHumanHeight },
{ 0*256/286, 4100*256/286, gFarHeight-gHumanHeight },
{ 1300*256/286, 2400*256/286, gFarHeight*2/3-gHumanHeight },
};
float angle = 36 * 3.1415926535f / 180;
int minx = 0x7fffffff;
int maxx = -0x7f000000;
int miny = 0x7fffffff;
int maxy = -0x7f000000;
for (int i = 0; i < ARRAYSIZE(points); i++)
{
int xs = cx/2+(int)(cy*atan((float)points.x/points.y)/angle);
int ys = cy/2-(int)(cy*atan(-(float)gHumanHeight/points.y)/angle);
MoveToEx(hdc, xs, ys, NULL);
xs = points.xs = cx/2+(int)(cy*atan((float)points.x/points.y)/angle);
ys = points.ys = cy/2-(int)(cy*atan((float)points.z/points.y)/angle);
LineTo(hdc, xs, ys);
MoveToEx(hdc, xs-1, ys, NULL);
LineTo(hdc, xs+2, ys);
if (xs < minx) minx = xs;
if (xs > maxx) maxx = xs;
if (i < 2)
{
if (ys < miny) miny = ys;
if (ys > maxy) maxy = ys;
}
}
int rhorz = points[1].ys-(points[0].ys-points[1].ys)*528/788;
if (rhorz >= 0)
{
HGDIOBJ prevPen = SelectObject(hdc, CreatePen(PS_SOLID, 1, 0xff0000));
MoveToEx(hdc, 0, rhorz, NULL);
LineTo(hdc, cx, rhorz);
DeleteObject(SelectObject(hdc, prevPen));
}
HGDIOBJ prevPen = SelectObject(hdc, CreatePen(PS_SOLID, 1, 0x0000ff));
int width = (int)(cy/2);
int xs1 = cx/2-width;
MoveToEx(hdc, xs1, 0, NULL);
LineTo(hdc, xs1, cy);
int xs2 = cx/2+width;
MoveToEx(hdc, xs2, 0, NULL);
LineTo(hdc, xs2, cy);
DeleteObject(SelectObject(hdc, prevPen));
prevPen = SelectObject(hdc, CreatePen(PS_SOLID, 1, 0x00ff00));
MoveToEx(hdc, 0, cy/2, NULL);
LineTo(hdc, cx, cy/2);
DeleteObject(SelectObject(hdc, prevPen));
prevPen = SelectObject(hdc, CreatePen(PS_SOLID, 1, 0x00ffff));
MoveToEx(hdc, minx, miny, NULL);
LineTo(hdc, maxx, miny);
LineTo(hdc, maxx, maxy);
LineTo(hdc, minx, maxy);
LineTo(hdc, minx, miny);
DeleteObject(SelectObject(hdc, prevPen));
int dx = maxx-minx;
int dy = maxy-miny;
int ratio = 1000*dy/dx;
TCHAR txt[256];
wsprintf(txt, TEXT("Соотношение сторон кратера на рисунке: %d.%.3d (%dx%d)"), ratio/1000, ratio%1000, dx, dy);
TextOut(hdc, 0, 0, txt, lstrlen(txt));
int ratio2 = 1000 * dx / cy;
wsprintf(txt, TEXT("Соотношение ширины кратера и рисунка: %d.%.3d (%dx%d)"), ratio2/1000, ratio2%1000, dx, cy);
TextOut(hdc, 0, 16, txt, lstrlen(txt));
int horzAngle = (int)(((cy/2-rhorz)*angle/cy)*180/0.31415926535f);
TCHAR c = ' ';
if (horzAngle < 0)
{
c = '-';
horzAngle = -horzAngle;
}
wsprintf(txt, TEXT("Угол между горизонтом и горизонталью на высоте наблюдения: %d.%d °"), horzAngle/10, horzAngle%10);
TextOut(hdc, 0, 32, txt, lstrlen(txt));
}
Есть и другие интересные моменты на фото с НАСА.
http://history.nasa.…5549HR.jpg Видно что фотограф стоит в углублении. Пытаемся представить картинку. Человек первый раз на Луне, один из двух. Хочет увидеть и снять побольше. В качестве точки съёмки выбирает углубление. Он что, дурак? Или повредился головой во время полёта? Ясное ж дело, больше можно снять с более высокой, а не низкой точки.
http://history.nasa.…105549.jpg Откуда здесь взялись камни призраки без тени? На складки местности не похоже, таких камней много, что, складки в точности у каждого камня? Тут следует учесть что в их случае освещение является не фронтальным. Логичное их направление легко определяется по тени LM, который находится примерно симметрично камням относительно тени фотографа. Следовательно и тень должна быть симметрична, а раз так, мы должны её видеть. Т.к. это противоречит фото, следовательно в каждом месте где есть тень есть складка местности её маскирующая. Нормально?
Ещё здесь тени никак не выдают солнце под углом 10 градусов, которое оно должно иметь судя по тому что написано здесь
http://epizodsspace.…3/4-3.html ("Такой старт давал возможность произвести посадку на Луне в расчетном месте № 2 при угле возвышения Солнца около 10°"), скорее 15-17. Следовательно мы 5 градусном склоне с подъёмом почти точно на запад (направление вычисляется из примерно одинакового наклона теней справа и слева от тени фотографа, тех которые на севере и юге). Т.к. горизонт у нас нигде не имеет наклона 5 градусов, делаем вывод что мы в низине с довольно симметричной, но не круговой формой, других вариантов не вижу, если бы это была равнина, то была бы видна Moltke A. Как я уже писал выше, мне это кажется очень маловероятным.
codegrinder
16 Август 2009, 22:55:17
Для тех кто не знаком с языком C++ приведу формулы.
1. Пересчёт координат в пространстве в экранные:
Xs = Кол-во_пикселей_на_угол_обзора * arctg(X/Y) / Угол_обзора
Ys = Кол-во_пикселей_на_угол_обзора * arctg(Z/Y) / Угол_обзора
Точка наблюдения находится по координатам 0, 0, 0. Ось X направлена вправо от наблюдателя, ось Z вверх, ось Y от наблюдателя.
2. Соответственно, горизонталь будет плоскостью описываемой Z = 0. На экран будет проецироваться в виде линии Ys = 0. Истинный горизонт примерно на одну точку ниже.
3. Горизонт на фото рассчитывается исходя из экранных размеров кратера. Замерив на фото размер кратера, и от верхней точки кратера до горизонта получим:
Экранная горизонталь горизонта = верхняя горизонталь кратера - размер кратера * 528 / 788.
4. Угол между горизонталью и горизонтом рассчитывается так: разница_в_точках * угол_обзора / вертикальный размер.
5. Границы кадра рассчитываются исходя из его квадратности. Т.к. у нас минимальное число - это вертикальный размер окна, то кол-во точек на угол обзора равно вертикальному размеру окна в котором отображается картинка.
Итак, с формулами порядок?
Тогда координаты точек в пространстве (всё в м):
1. Самая ближняя к наблюдателю и самая левая точка кратера:
-6*256/286, 23*256/286, высота_ближнего_вала-высота_наблюдателя
2. Самая дальняя от наблюдателя точка:
0, 41*256/286, высота_дальнего_вала-высота_наблюдателя
3. Самая правая точка:
13*256/286, 24*256/286, высота роли не играет
А вот тут возможны разночтения. Но как я ни менял, угол наклона горизонта ниже 12 градусов не падает. Приведённый выше вариант кажется мне наиболее честным.
Расшифровка цветов на снимке экрана:
Черный - линия от уровня ног корабля до точки.
Желтый - размеры кратера на экране.
Зелёный - горизонтальная плоскость в точке наблюдения.
Синий - реальный горизонт на фото.
Красный - границы кадра.
Также выводится отношение вертикального размера кратера на экране к горизонтальному. На фотографии отношение около 0,394, к этому значению следует стремиться.
P.S. Всё это в принципе просчитывается в Excel, просто с программой легче экспериментировать и она нагляднее.
codegrinder
Сегодня в 10:11:08
Минус одна ошибка. Т.к. исходное разрешение рисунка от LROC 256 точек, то точки в метры надо преобразовывать не так: *256/286, а наоборот: *286/256. Результат: Исследуемая часть кратера в угол обзора фотоаппарата не влазит вообще никак, угол наклона между горизонтом и горизонталью возрос с 13,5 до 16,3 градуса. Перепад высот между валами кратера - 9,5 м. Вообще ни в какие ворота не лезет.
P.S. А если ещё учесть передний вал на высоте примерно 1 м получается вообще мрак: перепад высот 10 м, угол наклона 18 градусов.
P.P.S. Угол проверяется вообще элементарно:
Здесь (
http://s52.radikal.r…f6be37.png) я отметил точки по которым мерял.
arctg(21/17)-arctg(8/30) = 36,08 градусов.
P.P.P.S. С углом обзора вроде понятно, если снимали на 60 мм пластину. Тогда угол получается 41,11 градуса, это немного приводит размер в норму. Но вот на всё остальное это практически не влияет.