Рассчитать угол матрицы с топографией для каждого треугольника
У меня есть матрица с данными топографии, скажем, несколько холмов. Я хочу получить информацию о углу каждой точки данных к вертикальной линии. Вот два примера:
- Если я рассматриваю место у подножия холма, которое является абсолютно плоским, у меня есть степень 90° (90° к вертикальной линии).
- Если я нахожусь в самой крутой точке холма, у меня есть более низкий угол, скажем, 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;
В зависимости от вашей карты высот численное дифференцирование может привести к "нечетким" результатам. Возможно, вам нужно сделать некоторую фильтрацию размытия, чтобы получить более плавные градиенты.