Skip to content

Instantly share code, notes, and snippets.

@aemarkov
Last active April 6, 2016 08:35
Show Gist options
  • Save aemarkov/f7c267bfc495ecaa940c549a6986b348 to your computer and use it in GitHub Desktop.
Save aemarkov/f7c267bfc495ecaa940c549a6986b348 to your computer and use it in GitHub Desktop.

Дано:

мы можем как-то сгладить координаты точек контура

Надо:

нам надо записать сглаженные точки в правильные индексы

Решение

Координаты точек вычисляются как: x=x0+i*dx (1) y=y0+j*dy x0,y0 - некое начальное смещение i, j - индексы точек

Алгоритм:

  1. Идем вдоль контура и сглаживаем. У нас есть массив точек (само облако) point_cloud[][], старый контур ArrayList<Point2D> contour, новый аналогичный контур new_contour
  2. Сгладили некую точку point_cloud[i,j] с координатами (x,y,z): (x,y,z) -> (x', y', z')
  3. Теперь нам надо получить новые координаты и записать их в новый контур. Выразим их из уравнений (1): i' = (x'-x0)/dx j' = (y'-y0)/dy
  4. Удаляем старую точку point_cloud[i,j] (x,y,z) - записываем NULL
  5. Добавляем новую точку point_cloud[i', j'] - записываем (x',y',z')
  6. Добавляем эту точку в контур: cloud.AddContourPoint(i', j')
  7. ???
  8. Profit

А если серьезно, то мне кажется, что этого достаточно. Шаг по x, y можно определить, если найти, к примеру, крайнюю левую и правую точку облака какой-то строки и раделить на число точек. Аналогично по Y. Это есть в HoleFiller.pde

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment