我使用Matlab 2013版本进行了Delaunay三角测量。 现在,我想删除一些三角形,意味着取消它们的连接, 例如,三角形编号760。 我该如何申请?当我试图编辑连接列表时,说: dt.ConnectivityList(760,:) = []; 我收到了消息: 无法为三角测量指定值。
我想过可能会将特定字段复制到不同的结构,但是: 一个。我不熟悉结构,所以我不知道该怎么做。 湾在我复制结构之后,我怎样才能得到我的三角形?
dt包含3个字段: Points,ConnectivityList和Constraints(空字段)。
请帮帮我:) 非常感谢。
答案 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)