2015-04-17 3 views
0

У меня есть возвышение карта горной местности (большой 2d массив со значениями г)Matlab: Вычислить кажущийся угол горизонта для точек на карте высот

Я хочу знать высоту кажущегося угла горизонта для всех компаса подшипники для определенных точек на моей карте высот.

Чтобы проиллюстрировать это, website имеет некоторые примеры того, что я хочу.

Редактировать: Я прекратил пытаться найти функцию, которая делает это, и теперь я пишу свой собственный.

Мой подход рисует линии из моей точки радиально, интерполируя высоту вдоль этих линий, а затем принимая max(z/r) вдоль каждой линии.

Если вы знаете функцию, которая уже делает это, пожалуйста, скажите мне, если нет, надеюсь, я смогу загрузить ее в ближайшее время.

+0

Что вы попробовали? – moffeltje

+2

Почему 'matlab'? Вы уже писали какой-то код «matlab» для решения вашей проблемы? Не могли бы вы показать нам, что вы сделали до сих пор? – gboffi

+1

До сих пор я просматривал много документации, ничего не нашел, и я надеялся, что кто-то здесь знает правильный инструмент. На данный момент я работаю над этим: http://www.mathworks.com/matlabcentral/fileexchange/49065-shadem, а затем повторяя все возможные углы (360 * 90), чтобы узнать, когда мои точки заштрихованы и когда они не являются. Но это должен быть лучший способ сделать это. Почему matlab: это часть большей физической модели, написанной в Matlab, и мне нужно включить затенение ландшафта для расчета потока энергии через поверхность. – Swier

ответ

2

Давайте предположим, что у вас есть 3 матрицы, XY и Z и ваше положение (x,y,z), вы можете вычислить

R = sqrt((X-x)**2 + (Y-y)**2) (ТХ Daniel ...)

R = sqrt((X-x).^2 + (Y-y).^2) 
Z = (Z-z) 

т.е. расстояния от положение и относительные высоты, так что

T = Z/R 

- матрица касательных, которые являются монотонной функцией угла зрения от положения к окружающей местности.

Для данного направления вы можете найти список ближайших по сети пунктов с вариацией Bresenham algorithm и, наконец, найти самое высокое значение T в своем списке.

В конце концов, из списка значений max T (касательных) для разных направлений вы можете вычислить визуальные углы со своего положения.

+0

Этот подход, вероятно, приведет к очень быстрому коду. В Matlab это '. ^' Not '**' – Daniel