У меня вопрос, связанный с построением цилиндрической поверхности в Matlab. Мой набор данных состоит из облака точек X, Y, Z
координат с соответствующими значениями интенсивности C
.Matlab triangulate и plot цилиндрическое облако точки в 3D
Я могу построить их с помощью функции scatter3
:
figure
scatter3(X,Y,Z,8,C)
результатов в следующем изображении:
Однако, я хотел бы построить поверхность этого объекта, а не точки. Я пытался добиться этого при помощи триангуляции Делоне
tri = delaunay(X,Y);
figure
trisurf(tri,X,Y,Z,C,'FaceColor','interp')
Как вы можете видеть на картинке результат не то, что я хотел бы, как есть трудности с триангуляции. Мне кажется, что алгоритм не очень хорошо справляется с тем, что я получаю те же самые X
и Y
координаты несколько раз.
Следуя пример, введенный на странице TriRep
помощи Я пытался использовать следующий подход:
dt = DelaunayTri(X,Y,Z);
tr = TriRep(dt, X, Y, Z);
увы без успеха, как я получаю следующее сообщение об ошибке при вызове TriRep
функции:
? ?? Ошибка при использовании ==> TriRep Параметр должен быть «двойной матрицей».
Я предполагаю, что я должен сдерживать свою геометрию, и я думал, что я нашел решение в Example 1 here с помощью функции freeBoundary
- хотя мне нужен выход функции TriRep
для расчета этого. Вот где я застрял. Как вы можете видеть, я не эксперт в методах триангуляции, и я был бы очень признателен за любую помощь, которую вы могли бы предложить. Благодаря!
Спасибо, что указал мне в этом направлении. Я пробовал это, и он выглядит намного лучше, хотя все еще не совсем то, чем я был. В настоящее время на поверхности слишком мало лиц, а цилиндр также закрыт на верхнем и нижнем концах. То, что я имел в виду, - это открытый цилиндр с максимально возможными малыми гранями на боковых стенках без перекрытия. У вас есть идея, как я могу это достичь? –
Использование T = delaunayn (X, {'Qt', 'Qc', 'Qx', 'Q4'}); Я смог получить некоторые новые результаты, которые действительно близки к тому, что я хочу (я не буду использовать выпуклую оболочку, поскольку это будет опускать точки, учитывая, что цилиндр не полностью выпуклый). Моя последняя проблема теперь заключается в том, что верхняя и нижняя грани цилиндра закрыты. Есть ли способ указать «максимальное расстояние триангуляции» в delaunayn? Если бы я мог указать максимальную длину грани треугольника, тогда я мог бы легко избежать заполнения верхней и нижней грани ... –
Просто примечание: цикл for работает вниз, а не вверх, поэтому вам не нужно возиться с вычислением индексации после удаления строк. –