Мне нужно сделать триангуляцию поверхности камней (агрегатов) облака точек в 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);
Вопрос: С помощью какой функции и как (пожалуйста, подробно) я могу выполнить подробную трехмерную триангуляцию каменной поверхности любой формы? Каковы были мои ошибки над кодами?