Почему 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). Эта долгота должна держать нас на карте:
СМОТРИТЕ ПОЛНЫЙ ОТВЕТ НАЖМИТЕ НА ССЫЛКУ