Ужасы войны. Сконвертил в сферическую проекцию всё те же два рисунка: AS11-39-5750HR и AS11-39-5751HR. Получил:
А теперь ужасы. У меня получается, что изменение угловых расстояний (т.к. проекция сферическая, то угол пропорционален расстоянию в точках) за кратером около 1,5 % на углах в районе 10 градусов, что сразу за ним, что ближе к горизонту. Надо ещё проверить, но если это так, знаете что это значит? Это значит, что за кратером стоит экран. Т.к. отношение тангенсов углов пропорционально расстоянию до предмета, а для небольших углов тангенс примерно равен самому углу, то получается, что расстояние до этих мест несильно отличается. Не на сотни метров. Кто хочет - меряйте сами, исходные изображения в сферической проекции прилагаю. Мерить надо по линиям равноудалённым от горизонта, хотя бы примерно. Т.к. программа конвертации может допустить ошибку в 1 точку, это стоит учитывать, поэтому желательно мерить достаточно большие углы, 300-500 точек (2165 точек это примерно 46 градусов).
AS11-39-5750HR_Sphere.pngAS11-39-5751HR_Sphere.pngЕсли всё верно, то вот вам ещё одно неубиваемое доказательство фальсификации. Я что-то сомневаюсь, что на луне за ближайшим к ЛМ кратером стоит экран.
Если же посмотреть на стереопару, впечатление что экран несколько наклонен назад, но угол очень большой, десятки градусов.
Я немного изменил конвертирование, чтобы учесть смещение центрального креста от центра. Держите последний вариант.
HBITMAP processBitmap(HBITMAP SrcBmp, int CenterX, int CenterY)
{
if (NULL != SrcBmp)
{
DIBSECTION ds;
if (sizeof(ds) == GetObject(SrcBmp, sizeof(ds), &ds)
&& 24 == ds.dsBm.bmBitsPixel)
{
int width = ds.dsBm.bmWidth;
int height = ds.dsBm.bmHeight;
PBYTE pBits = (PBYTE)ds.dsBm.bmBits;
double axc = atan(10.0*CenterX/gPixelsPer10mm/gFocusLength);
double ax = axc+atan(atan(10.0*(width-CenterX)/gPixelsPer10mm/gFocusLength));
double ax_1 = atan(10.0/gPixelsPer10mm/gFocusLength);
int cx = int(ax/ax_1);
int center_x = int(axc/ax_1);
double ayc = atan(10.0*CenterY/gPixelsPer10mm/gFocusLength);
double ay = ayc+atan(10.0*(height-CenterY)/gPixelsPer10mm/gFocusLength);
double ay_1 = atan(10.0/gPixelsPer10mm/gFocusLength);
int cy = int(ay/ay_1);
int center_y = int(ayc/ay_1);
BITMAPINFOHEADER bmih =
{
sizeof(bmih),
cx,
cy,
1,
24,
BI_RGB,
0, 0, 0, 0, 0
};
PBYTE pNewBits = NULL;
HBITMAP hbmr = CreateDIBSection(NULL, (BITMAPINFO *)&bmih, DIB_RGB_COLORS, (PVOID *)&pNewBits, NULL, 0);
if (NULL != hbmr)
{
int srcLineSize = (width*3+3)&~3;
int dstLineSize = (cx*3+3)&~3;
for (int j = 0; j < cy; j++)
{
for (int i = 0; i < cx; i++)
{
double xa = ax_1*(i-center_x);
double ya = ay_1*(j-center_y);
int x = int(gFocusLength*tan(xa)*gPixelsPer10mm/10)+CenterX;
int y = int(gFocusLength*tan(ya)/cos(xa)*gPixelsPer10mm/10)+CenterY;
if (x >= 0 &&
y >= 0
&& x < width
&& y < height)
{
RGBQUAD *pSrc = (RGBQUAD *)(pBits + y*srcLineSize+x*3);
RGBQUAD *pDst = (RGBQUAD *)(pNewBits + j*dstLineSize+i*3);
pDst->rgbRed = pSrc->rgbRed;
pDst->rgbGreen = pSrc->rgbGreen;
pDst->rgbBlue = pSrc->rgbBlue;
}
}
}
return hbmr;
}
}
}
return NULL;
}
P.S. Только что проверился ещё раз на расстояних отличающихся раз в 5 по идее. Получил разницу в 1,45 раза примерно. Т.е. вместо 20 и >100, а то и все 200, только 20 и 30. Всё, это пушной зверёк, никак иначе. Прибавить больше нечего.
P.P.S. А я-то всё никак не мог понять откуда у меня ощущение дикого подъёма в этом месте. Думал, что сильный подъём вблизи, а дальше более полого. Рельеф хотел воссоздавать. Офигеть.