已知常规的建模软件无法实现结构随机性,借助于代码实现随机性又很难转换为三维模型。
故小编今日分享基于Matlab实现三维随机曲面建模的方法。这或许是打通复杂三维结构建模屏障的一个有效的方法。
步骤:在Matlab建立随机三维曲面,将曲面的数据矩阵转化为可以编辑为点云的格式,输出ply格式的点云文件,在Geomagic将点云文件封装,并通过曲面编辑工具将三维模型导出为igs格式,将igs文件导入Solidworks进一步修饰,最后导出为x_t格式的文件。最后我们用该三维模型进行了有限元仿真。
具体实现方法:我们先在Matlab平台上建立一个随机三维曲面。核心函数为interp2(),这是一个二维插值函数,主要是在规定的范围内插入若干随机点。
x=1:1:6;
y=1:1:6;
temps=rand(6,6)*20+60;
mesh(x,y,temps);
[xi,yi]=meshgrid(1:0.1:6,1:0.1:6);
zi=interp2(x,y,temps,xi,yi,'spline');
mesh(xi,yi,zi)
然后,我们要将结果数据编辑为.ply格式的点云文件,该格式的数据格式为N*3矩阵,即每行存储一个三维空间点坐标。而我们得到的数据格式为51*51的矩阵:
现将xi、yi、zi值分别提取存储到新的矩阵xyzPoints中。主要进行遍历即可。
a=1;b=1;
[c,d]=size(xi);
for i=1:1:c*d
xyzPoints(i,1)=a;
if i/c == round(i/c)
a=a+1;
end
xyzPoints(i,2)=b;
b=b+1;
if b==c+1
b=1;
end
xyzPoints(i,3)=zi(xyzPoints(i,1),xyzPoints(i,2));
end
新生成的xyzPoints的矩阵格式变成了N*3。
然后将xyzPoints输出为.ply格式的文件,这是点云文件的通用格式,也是从点到实体的重要一步。
ptCloud = pointCloud(xyzPoints);
pcshow(ptCloud);
pcwrite(ptCloud, 'xyz.ply')
此时会输出点云的图像,用来验证生成的xyzPoints数据是否如预期所料。
在当前工作目录下会出现一个名为xyz.ply的文件。
我们需要打开Geomagic Studio软件,这是一个用来修饰三维模型的软件,将xyz.ply导入进去,出现了若干个点。
然后我们将这些点封装起来,原理就是点连成线线连成面。采样的点间距用来控制以什么样的分辨率采集可连成直线的点,如果这个值很大,相邻的点就无法连成直线,将影响最终的效果,所以这个值尽量小。
封装完成后,我们得到了这个曲面,可能会出现一些瑕疵,我们利用填孔工具修补即可。
现在这个图形并未完全成为实体,表面使用三角形面片连接而成的,还有很多棱角。我们需要进行一系列操作才能保存为三维格式。首先精确曲面。
然后自动曲面化,参数默认即可。
然后拟合曲面。
拟合后的曲面相对于之前的曲面来说表面更光滑了。然后我们将此模型保存为.igs格式。
保存时会出现这样的对话框。点击确定即可。
我们将.igs格式的文件导入Solidworks,可以看到模型的表面已经重新被划分了曲面,没有三角形面片的痕迹了。将此模型保存为Abaqus软件可以识别的三维格式.x_t。
在Abaqus中导入x_t文件。
然后进行一系列常规操作。施加载荷、划分网格等。
最后运行结果。
可以看出,通过这样建立的模型完全可以在有限元软件中使用。
启示:我们在研究一些仿生的结构时往往需要随机孔洞或梯度孔洞模型,这些孔洞在Solidworks中直接画的话很复杂,而且不易控制。基于Matlab代码可以实现对孔洞多参数的修改,也更容易控制形状或梯度。
本文只是抛砖引玉,更复杂的模型也可以这样构造。
关注小时光年,更多科研知识持续更新中!需要科研插图优化服务+v:Dr_Lou_BME2020