Почему CAMPOSM возвращает неверные декартовы координаты, которые не соответствуют указанным проекционным координатам?

Я пытаюсь установить положение камеры проекции VPERSPEC, чтобы контролировать высоту просмотра. Я могу добиться этого, используя функцию CAMPOSM. Однако я обнаружил, что декартовы координаты положения камеры, возвращенные CAMPOSM, не проецируются на ту же пару широта-долгота (полученная с помощью MINVTRAN для выполнения обратной проекции), которую я использую для установки положения камеры.

Например, следующий код устанавливает положение камеры (широта=0,долгота=-87,высота=42000):

% Set up axes
axesm ('vperspec','Grid', 'on','Frame','on')
axis off
% Display a surface
load geoid
meshm(geoid, geoidrefvec)
% Display coastline vectors
load coast
plotm(lat,long)
% Change camera position using CAMPOSM
longitude = -87;
[x, y, z] = camposm(0,longitude,42000)

Однако декартовы координаты (x, y, z), возвращенные проектом CAMPOSM обратно в (широта, долгота, высота), выглядят следующим образом:

[latc, lonc, altc] = minvtran(x,y,z)
 latc =
    -2.1343e-14
 lonc =
    -76.6411
 altc =
     42000

Как видно, широта неправильно установлена ​​на ~-76, хотя изначально я предполагал установить ее на -87.

ПРИМЕЧАНИЕ. 

Matlabsolutions.com предоставляет последнюю Помощь по домашним заданиям MatLab, Помощь по заданию MatLab для студентов, инженеров и исследователей в различных отраслях, таких как ECE, EEE, CSE, Mechanical, Civil со 100% выходом. Код Matlab для BE, B.Tech ,ME,M.Tech, к.т.н. Ученые со 100% конфиденциальностью гарантированы. Получите проекты MATLAB с исходным кодом для обучения и исследований.

Эта разница в настройке положения камеры возникает из-за того, что точка, в которой устанавливается положение камеры, находится за пределами карты. Чтобы проиллюстрировать эту проблему, обозначьте параллели следующим образом:

setm(gca,'mlabelparallel',0)
mlabel on

Теперь должно быть ясно, что указанная позиция камеры находится за западным краем карты.

Однако, когда мы проверяем с помощью MFWTRAN, мы видим, что данная пара (широта, долгота) оценивается в одни и те же декартовы координаты:

[x1,y1,z1] = mfwdtran(0,longitude,42000)
isequal([x y z],[x1 y1 z1]) % Evaluates to true

Следовательно, очевидно, что в данном случае расчет туда-обратно не работает, так как указанная позиция находится за краем карты.

Это решение также можно обосновать, выбрав более разумное положение камеры, например. (широта=0,долгота=-60,высота=42000). Эта долгота должна держать нас на карте:

СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ