Delaunay三角剖分 - 删除三角形

时间:2014-01-04 07:01:32

标签: matlab triangulation delaunay

我使用Matlab 2013版本进行了Delaunay三角测量。 现在,我想删除一些三角形,意味着取消它们的连接, 例如,三角形编号760。 我该如何申请?当我试图编辑连接列表时,说: dt.ConnectivityList(760,:) = []; 我收到了消息: 无法为三角测量指定值。

我想过可能会将特定字段复制到不同的结构,但是: 一个。我不熟悉结构,所以我不知道该怎么做。 湾在我复制结构之后,我怎样才能得到我的三角形?

dt包含3个字段: Points,ConnectivityList和Constraints(空字段)。

请帮帮我:) 非常感谢。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

我遇到了同样的问题。我发现了另一个解决方只需创建其超类的对象,即创建具有已编辑连接列表的三角测量类,而不是创建新结构。 这是我的代码

P-分数列表

C-约束(可选)

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)