Рассчитать угол матрицы с топографией для каждого треугольника

У меня есть матрица с данными топографии, скажем, несколько холмов. Я хочу получить информацию о углу каждой точки данных к вертикальной линии. Вот два примера:

  1. Если я рассматриваю место у подножия холма, которое является абсолютно плоским, у меня есть степень 90° (90° к вертикальной линии).
  2. Если я нахожусь в самой крутой точке холма, у меня есть более низкий угол, скажем, 50°.

Чтобы вычислить это, я думаю, мне нужно соединить все данные топографии так, чтобы (как минимум) три ближайших пикселя образовали треугольник. После этого я должен вычислить угол (ы) этого треугольника.

Могу ли я использовать существующий алгоритм?

1 ответ

Решение

Если ваша карта высот представляет собой матрицу A, то вы можете аппроксимировать градиентные компоненты каждой внутренней точки (без egdes) как

  Xgrad = (A(2:end-1,3:end)-A(2:end-1,1:end-2))/2;
  Ygrad = (A(3:end,2:end-1)-A(1:end-2,2:end-1))/2;

Углы будут тогда

  deg = (pi/2 - atan(sqrt(Xgrad.^2 + Ygrad.^2),1))/pi*180;

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

Другие вопросы по тегам