Триангуляция 3D-объектов в Matlab

Мне нужно сделать триангуляцию поверхности камней (агрегатов) облака точек в Matlab. Для этого у меня есть x,y,z в декартовой системе координат.

Для простоты я начал со сферического объекта.

DT = delaunayTriangulation(x,y,z);
figure
trisurf(DT.ConnectivityList,DT.Points(:,1),DT.Points(:,2),DT.Points(:,3), ...
       'FaceColor','cyan','FaceAlpha', 0.8);

Запустите код и получите следующий результат: Триангуляция сферического объекта

Он также создает треугольники внутри сферы. Соединение одной точки с другой напротив или где-то еще.

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

Затем я попробовал функцию DelaunayTri(). Он работал для сферического объекта, триангулировал только поверхность. Но когда пробовали более сложную (каменную) форму, функция просто идеализировала форму и не учитывала все выступы (неровности) камня.

tri = DelaunayTri(x,y,z);
[FBtri,FBpoints] = freeBoundary(tri);

figure
trisurf(FBtri,FBpoints(:,1),FBpoints(:,2),FBpoints(:,3), ...
       'FaceColor','cyan','FaceAlpha', 0.8);

Когда функция freeBoundary() удаляется из приведенного выше кода, результат тот же (идеализированный), а триангуляция выполняется внутри объекта, что неприемлемо.

Наконец, я использовал функцию delaunay(). Который даже не правильно триангулировал сферу.

tri = delaunay(x,y,z);
figure
trisurf(tri,x,y,z,'FaceColor','cyan','FaceAlpha', 0.8);

Вопрос: С помощью какой функции и как (пожалуйста, подробно) я могу выполнить подробную трехмерную триангуляцию каменной поверхности любой формы? Каковы были мои ошибки над кодами?


person isifzade    schedule 04.02.2017    source источник


Ответы (1)


Ни один из испробованных вами чистых методов, основанных на delaunay, не сделает то, что вы хотите — все они тесселируют полную выпуклую оболочку ввода, а не только поверхность.

Реконструкция общих поверхностей по облакам точек — непростая задача. Я не верю, что это можно сделать напрямую с помощью встроенной функции MATLAB.

Вы можете рассмотреть другие варианты, такие как инструменты surface-reconstruction, предоставляемые CGAL. .

person Darren Engwirda    schedule 04.02.2017