matlab如何读取并显示stl模型

matlab函数如何读取并显示stl模型

利用stlread函数可方便的实现stl文件读取的操作,不过该实现只可读取binary格式的stl文件,并不能读取ASCII格式的stl文件,相应实现也很简单。不过本文的重点不在stl模型的读取上,而在stl模型的显示上。

patch绘制一个四边形

matlab自带的patch函数可以实现多边形的绘制

patch(X,Y,Z,C) 使用 XYZ 在三维坐标中创建多边形。

X指的是多边形各顶点的x坐标构成的一维向量。Y,Z同理,C表示Color,通过改变C的参数改变面片的颜色。

例如:

创建一个红色正方形,顶点位于 (0,0)(1,0)(1,1)(0,1)。将 x 指定为顶点的 x 坐标,并将 y 指定为 y 坐标。patch 会自动将最后一个 (x,y) 坐标与第一个 (x,y) 坐标连接。

x = [0 1 1 0];
y = [0 0 1 1];
patch(x,y,'red')

红色正方形

我们在绘制stl模型的时候实际上要一个不拉的绘制组成stl模型的所有三角面片。可以通过遍历的方法来实现,但通过改造数据的存储方式可直接调用patch(x,y,z)函数绘制出stl模型


patch函数绘制两个三角形

通过将 xyz指定为三行两列矩阵,创建两个三角形。

x =		   	[95.5147094726563,91.7259368896484;94.4062042236328,95.5147094726563;89.4406509399414,89.4406509399414];
y = 
[17.7316799163818,17.7316799163818;0,17.7316799163818;0,0];
z = [0.283457338809967,0.159092247486115;14.8238019943237,0.283457338809967;14.5865011215210,14.5865011215210];
patch(x,y,z,'green');

看上去很复杂。但把这组数据解读一下

x=[第一个三角形的第一个点的x坐标,第二个三角形的第一个点的x坐标;...;第n个三角形的第一个点的x坐标;
   第一个三角形的第二个点的x坐标,第二个三角形的第二个点的x坐标;...;第n个三角形的第二个点的x坐标;
   第一个三角形的第三个点的x坐标,第二个三角形的第三个点的x坐标;...;第n个三角形的第三个点的x坐标;]
y=[第一个三角形的第一个点的y坐标,第二个三角形的第一个点的y坐标;...;第n个三角形的第一个点的y坐标;
   第一个三角形的第二个点的y坐标,第二个三角形的第二个点的y坐标;...;第n个三角形的第二个点的y坐标;
   第一个三角形的第三个点的y坐标,第二个三角形的第三个点的y坐标;...;第n个三角形的第三个点的y坐标;]
z=[第一个三角形的第一个点的z坐标,第二个三角形的第一个点的z坐标;...;第n个三角形的第一个点的z坐标;
   第一个三角形的第二个点的z坐标,第二个三角形的第二个点的z坐标;...;第n个三角形的第二个点的z坐标;
   第一个三角形的第三个点的z坐标,第二个三角形的第三个点的z坐标;...;第n个三角形的第三个点的z坐标;]

只要按这样的格式对数据进行存储就可以使用patch函数直接绘制出stl模型。

绘制两个三角形

ver1,ver2, ver3 分别表示组成该三角面片的第一个顶点,第二个顶点,第三个顶点。

x(:,i)=[ver1(1); ver2(1); ver3(1)]; % 第一个三角面片的三个点的x坐标
y(:,i)=[ver1(2); ver2(2); ver3(2)]; % 第一个三角面片的三个点的y坐标
z(:,i)=[ver1(3); ver2(3); ver3(3)]; % 第一个三角面片的三个点的z坐标

x的第i列为第i个三角面片的第一个顶点的x坐标,

​ 第二个顶点的x坐标,

​ 第三个顶点的x坐标。

y的第i列为第i个三角面片的第一个顶点的y坐标,

​ 第二个顶点的y坐标,

​ 第三个顶点的y坐标。

z的第i列为第i个三角面片的第一个顶点的z坐标,

​ 第二个顶点的z坐标,

​ 第三个顶点的z坐标。

patch函数额外参数

matlab允许在调用patch()时提供一些额外的参数来改变透明度,面片颜色,线条样式等信息

示例: patch(x,y,c,'FaceAlpha',.5,'LineStyle',':') 创建包含点线边的半透明多边形。

在’FaceAlpha’后输入0-1的值表示透明度,范围 [0,1] 中的标量 - 在所有面上使用统一的透明度。值为 1 时完全不透明,值为 0 时完全透明;

在’LineStyle’后输入线性参数,改变线条样式;

matlab绘制stl模型

[x,y,z,c] = stlread('C:\Users\Admin\Desktop\stlread\skeletonTest.STL');
        		backcolor = 'white';
        		patch(x,y,z,'w','FaceAlpha',.5,'EdgeColor','black');
        		set(gca,'xtick',0:10:200);  
       		 	set(gca,'ytick',0:10:90);
       		 	set(gca,'ztick',-20:10:140);
        		view(3);

stl模型绘制

  • 8
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值