在matlab中绘制3维图形时,需要将3维图形导出到PPT中展示。但是直接导出图片效果欠佳,无法全方位展示。
最近学习了如何将matlab中的图形导出为stl模型,然后再采用简单的方法对模型上色。
中间尝试过matlab导出stl、ply、3dm等多种格式,其中stl格式的三维模型导出最为简便,其他格式导出需要获取所有定点和面的信息,但是isosurcafe函数我自己没整明白,所以最后还是选择stl模型。
1.matlab生成3维图形
matlab中绘制3维图形时通常采用surf、mesh等函数,生成surface类。
例如,我绘制一个全向天线方向图:
下面展示一些 内联代码片
。
// 绘制全向天线方向图
theta =linspace(0,pi*2,50);% 定义方位角范围(以弧度表示)
phi = linspace(0+0.001*pi,pi+0.001*pi,50);% 定义俯仰角范围
% 创建网格
[Phi,Theta] = meshgrid(phi,theta);
r = sin(3*Phi).*cos(theta);
x = r.*sin(Phi ).*cos(Theta);
y = r.*sin(Phi ).*sin(Theta);
z = r.*cos(Phi );
figure(1);
surf(x,y,z);
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Antenna Radiation Pattern in Polar Coordinates');
得到的结果如下图所示。
在matlab中,可以对该图形进行旋转,拖拽,以观察其在不同方位角和俯仰角的结果。但是在做PPT展示或者在其他没有matlab环境的电脑上需要分析展示时,无法做到该功能。
因此萌生了 将该三维模型导出成标准格式的模型的想法。
2.surface转stl
将matlab中的surface类直接转为stl类较为简单,该函数有国外大佬在04年就写好了,直接下载并调用即可。下载链接
调用该函数也很简单,只要是网格类数据就可以直接调用。比如对于上面提到的天线方向图来说:
// 绘制全向天线方向图
theta =linspace(0,pi*2,50);% 定义方位角范围(以弧度表示)
phi = linspace(0+0.001*pi,pi+0.001*pi,50);% 定义俯仰角范围
% 创建网格
[Phi,Theta] = meshgrid(phi,theta);
r = sin(3*Phi).*cos(theta);
x = r.*sin(Phi ).*cos(Theta);
y = r.*sin(Phi ).*sin(Theta);
z = r.*cos(Phi );
figure(1);
surf(x,y,z);
xlabel('X');
ylabel('Y');
zlabel('Z');
title('Antenna Radiation Pattern in Polar Coordinates');
surf2stl('radio_antenna.stl',x,y,z)
只要在最后加上这个函数的调用即可。就可以得到白模文件。直接用windows自带的画图3D就可以打开查看。
3.白膜简易上色
由于stl模型文件的导出是不包含颜色数据的,因此导出的模型也叫白膜。用blender等专业工具可以对其上色,但是对于外行来说,我觉得用画图3D直接上色比较简单。
画图3D自带的上色方案比较简单粗暴,只有填充、绘画和贴图。填充的颜色单一,绘画步骤复杂,我选择的是贴图的方法。
首先先自己准备一张图片,我是用matlab画了一张彩图作为贴纸。
然后再画图3D中选择贴纸,调整贴纸位置,覆盖模型
最后就可以得到想要的彩色三维模型了
因为我这个模型的横切面是圆形的,所以我选择的图片是渐变的同心圆。最后体现的结果就是:离中心近的地方颜色偏暖,离中心远的地方颜色偏冷。通过颜色反应天线方向图的相对辐射强度。
4.PPT中插入三维模型。
再offce2019及以后,PowerPoint软件新增了插入3D模型的功能。
通过对连续页插入同一个3D模型,然后改变其旋转角度和拉伸效果,可以自动生成动画,看起来很平滑。大家可以试一试,在PPT汇报中比较酷炫,可以锦上添花。