【问题标题】:Delaunay Triangulation - Removing TrianglesDelaunay 三角剖分 - 删除三角形
【发布时间】:2014-01-21 23:21:59
【问题描述】:

我使用 Matlab 2013 版进行了 Delaunay 三角剖分。我想删除一些三角形,这意味着取消它们的连通性,例如三角形编号 760。我该如何进行此更改?当我尝试编辑连接列表时:

dt.ConnectivityList(760 , :) = [];

我收到了消息:

Cannot assign values to the triangulation.

我想过可能将特定字段复制到不同的结构,但是:

一个。我对结构不熟悉,所以我不知道如何正确地做。
湾。复制结构后,如何获取三角形?

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

【问题讨论】:

  • 欢迎来到 Stack Overflow。请添加您已经取得的成就的详细信息。您的问题太宽泛,无法回答。
  • 您应该考虑为您的问题选择适合您的答案。这将从未回答的队列中删除您的问题。

标签: matlab triangulation delaunay


【解决方案1】:

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

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)

【讨论】:

    【解决方案2】:

    关于 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);
    

    【讨论】:

    • @user3121718。更新
    • 谢谢!现在是最后一个问题:) 例如说 dt 是: 3 5 7 10 2 8 当我将它复制到 dts (它的 ConnectivityList 归档)时,我得到: 3 10 5 2 7 8 有什么办法可以保存确切的大小和原始字段(dt.ConnectivityList)的维度?
    • sz=size(dt.ConnectivityList) 你永远不需要“保存”它,因为原始对象一直存在,直到你清除它。
    猜你喜欢
    • 2016-02-08
    • 2015-01-07
    • 2012-03-04
    • 2016-05-19
    • 2019-04-18
    • 2020-10-17
    • 2019-09-28
    • 2021-05-14
    • 2013-05-12
    相关资源
    最近更新 更多