мы можем как-то сгладить координаты точек контура
нам надо записать сглаженные точки в правильные индексы
Координаты точек вычисляются как:
x=x0+i*dx (1) y=y0+j*dy x0,y0 - некое начальное смещение i, j - индексы точек
Алгоритм:
- Идем вдоль контура и сглаживаем. У нас есть массив точек (само облако)
point_cloud[][]
, старый контурArrayList<Point2D> contour
, новый аналогичный контурnew_contour
- Сгладили некую точку
point_cloud[i,j]
с координатами (x,y,z): (x,y,z) -> (x', y', z') - Теперь нам надо получить новые координаты и записать их в новый контур. Выразим их из уравнений (1):
i' = (x'-x0)/dx j' = (y'-y0)/dy
- Удаляем старую точку
point_cloud[i,j]
(x,y,z) - записываем NULL - Добавляем новую точку
point_cloud[i', j']
- записываем (x',y',z') - Добавляем эту точку в контур:
cloud.AddContourPoint(i', j')
- ???
- Profit
А если серьезно, то мне кажется, что этого достаточно. Шаг по x, y можно определить, если найти, к примеру, крайнюю левую и правую точку облака какой-то строки и раделить на число точек. Аналогично по Y. Это есть в HoleFiller.pde