【Bio】Matlab 读取 stl 文件,操作 triangulation 对象

1. triangulation

TR = triangulation(T,P)

先解释参数 P 再解释 T 好理解一些

  • P: 表示点的集合,以矩阵形式指定,矩阵的列对应于三角剖分点的 x 坐标、y 坐标和(可能的)z 坐标。P 的行号是三角剖分中的顶点 ID。
  • T: 三角剖分连接列表,指定为 m×n 的矩阵,其中 m 是三角形或四面体的数量,n 是每个三角形或四面体的顶点数量。T 的每行包含用于定义三角形或四面体的顶点 ID。顶点 ID 是输入点的行号。三角剖分中三角形或四面体的 ID 是 T 中的对应行号。
% 有四个二维节点,坐标分别为  (2.5, 8.0) (6.5, 8.0) (2.5, 5.0) (6.5, 5.0)
P = [2.5  8.0; 
     6.5  8.0; 
     2.5  5.0; 
     6.5  5.0];

% 有四个三维节点,坐标分别为 (2.5, 8.0, 1) (6.5, 8.0, 2) (2.5, 5.0, 3) (6.5, 5.0, 4)
P = [2.5  8.0  1; 
     6.5  8.0  2; 
     2.5  5.0  3; 
     6.5  5.0  4];

% 四个节点共组成了2个三角形,其连接关系为:1-4-3,2-3-1
% 1-4-3 意思是 (2.5, 8.0)-(6.5, 5.0)-(2.5, 5.0)
T = [1  4  3;
     2  3  1];
TR = triangulation(T,P);

构成的 TR 对象具有两个属性:

  • Points - 三角剖分点
    – 三角剖分点,表示为具有以下特征的矩阵:
    – TR.Points 中的每行包含顶点坐标。
    – TR.Points 的每个行号是一个顶点 ID。

  • ConnectivityList - 三角剖分连接列表
    – 三角剖分连接列表,以具有下列特征的矩阵的形式表示:
    – TR.ConnectivityList 中的每个元素是顶点 ID。
    – 每行代表三角剖分中的一个三角形或四面体。
    – TR.ConnectivityList 的每个行号是一个三角形或四面体 ID。

TR_Points = TR.Points;
TR_CL = TR.ConnectivityList;
TR_Points =
    2.5000    8.0000    1.0000
    6.5000    8.0000    2.0000
    2.5000    5.0000    3.0000
    6.5000    5.0000    4.0000
    
TR_CL =
     1     4     3
     2     3     1

在这里插入图片描述


2. stlwrite()

stlwrite(TR,filename)
stlwrite(TR,filename,fileformat)

  • filename: 保存的文件名字,可以为 ‘xxx.stl’
  • fileformat: 指定写入文件的文件格式,fileformat 可以是 ‘binary’(默认值)或 ‘text’。
stlwrite(TR,'tritext.stl','text')

使用三维软件打开后,可以看到保存的文件 tritext.stl 如下图所示

在这里插入图片描述


3. stlread()

TR = stlread('tristltext.stl');

TR = stlread('tristltext.stl');

TR_Points = TR.Points;
TR_CL = TR.ConnectivityList;
TR_Points =
    2.5000    8.0000    1.0000
    6.5000    5.0000    4.0000
    2.5000    5.0000    3.0000
    6.5000    8.0000    2.0000

TR_CL =
     1     2     3
     1     3     4

注意:重新打开后生成的 TR 对象,节点的顺序与最早的定义顺序不同,连接关系也变了。但是也只是顺序和连接关系表示顺序不同,模型本质还是一样的。


4. triplot()

triplot(TR)

绘制由二维 triangulation 或 delaunayTriangulation 对象定义的三角形。

在这里插入图片描述

5. patch()

此函数主要功能为绘制一个或多个填充多边形区域。

patch(X,Y,C)
patch(X,Y,Z,C)
patch('XData',X,'YData',Y)
patch('XData',X,'YData',Y,'ZData',Z)

  • patch(X,Y,C) 使用 X 和 Y 的元素作为每个顶点的坐标,以绘制一个或多个填充多边形区域。patch 以您指定顶点的顺序连接这些顶点。要创建一个多边形,请将 X 和 Y 指定为向量。要创建多个多边形,请将 X 和 Y 指定为矩阵,其中每一列对应于一个多边形。C 决定多边形的颜色。
  • patch(X,Y,Z,C) 使用 X、Y 和 Z 在三维坐标中创建多边形。要在三维视图中查看这些多边形,请使用 view(3) 命令。C 确定多边形的颜色。
  • patch(‘XData’,X,‘YData’,Y) 类似于 patch(X,Y,C),不同之处在于您不需要为二维坐标指定颜色数据。
  • patch(‘XData’,X,‘YData’,Y,‘ZData’,Z) 类似于 patch(X,Y,Z,C),不同的是不需要为三维坐标指定颜色数据。

注意,当使用 ‘XData’、‘YData’ 或 ‘ZData’ 名称-值参数指定数据时,数据必须为数值类型,如 double、single 或整数类型。要指定 categorical、datetime 或 duration 数据,请使用 x、y 和 z 参数。

patch('Vertices',V, 'Faces',F)

  • patch(‘Vertices’,V, ‘Faces’,F) 创建一个或多个多边形,其中 V 指定顶点的值,F 定义要连接的顶点。
  • 当有多个多边形时,仅指定唯一顶点及其连接矩阵可以减小数据大小。为 V 中的每个行指定一个顶点。要创建一个多边形,请将 F 指定为向量。要创建多个多边形,请将 F 指定为矩阵,其中一行对应于一个多边形。不要求每个面都具有相同的顶点数。要指定不同数量的顶点,请以 NaN 值填充 F。

patch(S)

  • patch(S) 使用结构体 S 创建一个或多个多边形。结构体字段对应于补片属性名称,字段值对应于属性值。例如,S 可以包含字段 Faces 和 Vertices。

patch(___,Name,Value)
patch(ax,___)

  • patch(___,Name,Value) 创建多边形,并使用名称-值对组参数指定一个或多个补片属性。补片是包含所有已创建多边形的数据的对象。您可以使用上述语法中的任意输入参数组合指定补片属性。例如,‘LineWidth’,2 将所有多边形的轮廓宽度设置为 2 磅。
  • patch(ax,___) 将在由 ax 指定的坐标区中,而不是当前坐标区 (gca) 中创建补片。选项 ax 可以位于前面的语法中的任何输入参数组合之前。

p = patch(___)

  • p = patch(___) 返回包含所有多边形的数据的补片对象。使用 p 可在创建补片对象后查询并修改其属性。有关属性和描述的列表,请参阅 Patch 属性。

Ref

  1. triangulation - MathWorks
  2. stlwrite - MathWorks
  3. stlread - MathWorks
  4. triplot - MathWorks
  5. patch - MathWorks
  6. 三角剖分表示法 — 函数 - MathWorks
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zhao-Jichao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值