Триангуляция поверхности и её сглаживание. Как грамотно реализовать?

В общем поверхность задаётся картой высот, а именно двумерной матрицей a[n][m] (a[i][j] = z, i = x, j = y). Понятно, что точки располагаются так:
e4676ea0812645508886ca4839d07c99.png1. Триангуляция.
Поверхность разбивается на треугольники так:
e1bd58c12dda408bac0ceb807fd68a62.png
Или так, в некоторых случаях:
fa30403547f84612ba86f8ec703a5311.png
Правильно так делать? Никак лучше же нельзя вроде?

2. Сглаживание.
Собственно, главный вопрос, как из этой ломанной поверхности сделать более-менее гладкую?
Т. е., увеличить (дополнить) это матрицу таким образом, чтобы промежуточных точек было больше, и они сглаживали эту поверхность? Какие есть методы? Какой лучше подойдёт для данного случая?
370c919be8d843769511dd570bdf18e7.png14a49ab41297444cbeff760f6107a46c.png
  • Вопрос задан
  • 728 просмотров
Решения вопроса 1
@nirvimel
Для начала попробуйте на время забыть про физический смысл ваших данных, про все высоты и про 3D вообще. Дальше у вас имеется просто некая функция z = f(x, y) от двух аргументов, заданная таблицей значений в некоторых точках (ваши высоты). Вам нужно получить значения этой функции в других точках с меньшим шагом, то есть с большим разрешением по x и y. Это классическая задача 2D-интерполяции. Методов решения масса. Классикой считаются Бикубическая интерполяция и Фильтр Ланцоша.

Что касается готовых решений, то, например, в scipy есть соответствующие инструменты.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы