2014-01-04 3 views
2

Я сделал триангуляцию Деланея, используя версию Matlab 2013. Теперь я хочу удалить некоторые из треугольников, что означает отмену их подключения, например, . Треугольник номер 760. Как его применить? когда я попытался отредактировать список подключений, говоря: dt.ConnectivityList (760, :) = []; Я получил сообщение: Невозможно присвоить значения триангуляции.Триангуляция Delaunay - Удаление треугольников

Я думал о том, что, возможно, справился с конкретными полями в другую структуру, но: a. Я не знаком со структурами, поэтому я не знаю, как это сделать правильно. b. после того, как я скопирую структуру, как я могу получить свои треугольники?

dt содержит 3 поля: Баллы, Связь и ограничения (пустое поле).

, пожалуйста, помогите мне :) Большое спасибо.

+1

Добро пожаловать на переполнение стека. Пожалуйста, добавьте сведения о том, чего вы уже достигли. Ваш вопрос слишком широк для ответа. –

ответ

3

Краткая информация о предметах MATLAB. Когда вы получаете доступ к полю для чтения, вы в основном делаете get(obj, fieldname);. Когда вы пытаетесь установить поле, как вы делаете, вы на самом деле вызываете set(obj, fieldname, new_value). Объекты не обязательно позволяют выполнять эти операции.

Объект триангуляции доступен только для чтения, поэтому вам придется делать копии всех полей. Если, как вы сказали, вы хотели бы сделать структуру с аналогичными полями, вы можете сделать следующее:

dts = struct('Points', dt.Points, 'ConnectivityList', dt.ConnectivityList); 

Теперь вы можете редактировать поля.

dts.ConnectivityList(760) = []; 

Вы можете быть в состоянии построить новую структуру, но методы delaunayTriangulation класса не будут доступны для вас.

Для построения результата используйте trisurf:

trisurf(dts.ConnectivityList, dts.Points); 
+0

@ пользователь3121718. Обновлено –

+0

спасибо! теперь последний вопрос :) сказать, например, что дт является: 3-7 10-8 , когда я скопировать его в формат DTS (сво ConnectivityList подано), я получаю: -10 5 2 7 8 является там любой способ сохранить точный размер и размеры исходного поля (dt.ConnectivityList)? – user3121718

+0

'sz = size (dt.ConnectivityList) 'вам никогда не нужно« сохранять »его, потому что исходный объект всегда там, пока вы его не очистите. –

1

я столкнулся же проблемой. Я нашел другое решение. Вместо создания новой структуры просто создайте объект своего класса супер класса, т. Е. Триангуляции с отредактированным списком соединений. Вот мой код

P- список точек

C- Constraints (необязательных)

dt=delaunayTriangulation(P,C); %created triangulation but dt won't let you change connectivity list 

list=dt.ConnectivityList; 
%your changes here 

x=triangulation(list,dt.Points); 

Теперь вы можете использовать x как объект триангуляции

triplot(x) 

 Смежные вопросы

  • Нет связанных вопросов^_^