matlab函数如何读取并显示stl模型
利用stlread函数可方便的实现stl文件读取的操作,不过该实现只可读取binary格式的stl文件,并不能读取ASCII格式的stl文件,相应实现也很简单。不过本文的重点不在stl模型的读取上,而在stl模型的显示上。
patch绘制一个四边形
matlab自带的patch函数可以实现多边形的绘制
patch(X,Y,Z,C)
使用 X
、Y
和 Z
在三维坐标中创建多边形。
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函数绘制两个三角形
通过将 x
和 y
和z
指定为三行两列矩阵,创建两个三角形。
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);