[转帖]MATLAB中曲面转入ANSYS程序(附程序)
前段时间因课题需要,写了个MATLAB程序,把MATLAB中计算的曲面导入ANSYS,以作进一步处理。稍作修改,使其更有通用性。因水平有限,程序还有很多不足之处,请大家验证讨论。
例:
t=0:pi/10:2*pi;
=cylinder(2+cos(t));
mat2ans('cylinder.lgw',x,y,z);
运行ANSYS,在命令窗口输入:/input,cylinder.lgw 得到ansys中的曲面,该过程中ansys提示有几个错误,有些样条线和关键点不能删除,那是需要保留的。 附源程序:
function mat2ans(filename,x,y,z)
% 把MATLAB计算的曲线曲面导入ANSYS
% author:paradiseboy
% 2004-7-13
% Henan Polytechnic University
% www.dytrol.com
if(ischar(filename)==0)
error('Invalid filename');
end
if(ndims(z)~=2)
error('Variable z must be a 2-dimensional array');
end
if any((size(x)~=size(z))|(size(y)~=size(z))) % size of x or y does not size of z
if((length(x)==1)&(length(y)==1)) % Must be specifying dx and dy, so make vectors
dx=x;
dy=y;
x=((1:size(z,2))-1)*dx;
y=((1:size(z,1))-1)*dy;
end
if((length(x)==size(z,2))&(length(y)==size(z,1))) % Must be specifying vectors
xvec=x;
yvec=y;
=meshgrid(xvec,yvec);
else
error('Unable to resolve x and y variables');
end
end
fid=fopen(filename,'w');
if(fid==-1)
error(sprintf('Unable to write to %s',filename));
end
=size(z);
x=reshape(x',m*n,1);
y=reshape(y',m*n,1);
z=reshape(z',m*n,1);
fprintf(fid,'/prep7\r\n'); % 进入前处理
% 创建关键点
for i=1:m*n
fprintf(fid,'k,%4.d,%.5f,%.5f,%.5f,\r\n',i,x(i),y(i),z(i));
end
% 创建样条线
for i=1:m
fprintf(fid,'FLST,3,%3.d,3\r\n',n);
for j=1:n
fprintf(fid,'FITEM,3,%4.d,\r\n',j+(i-1)*n);
end
fprintf(fid,'BSPLIN, ,P51X\r\n');
end
% 由蒙皮技术创建面
fprintf(fid,'FLST,2,%2.d,4\r\n',m);
for i=1:m
fprintf(fid,'FITEM,2,%d\r\n',i);
end
fprintf(fid,'ASKIN,P51X\r\n');
fprintf(fid,'ldele,all\r\n');
fprintf(fid,'kdele,all\r\n');
fprintf(fid,'aplot\r\n');
fprintf(fid,'NUMCMP,ALL\r\n');
fprintf(fid,'FINISH\r\n');
fclose(fid); >> z=x.*exp(-x.^2-y.^2);
>> =surfnorm(x,y,z);
>> surf(x,y,z); axis equal
>> mat2ans('curve.lgw',x,y,z); >> =meshgrid(-3:.5:3,-3:.1:3);
>> z=peaks(x,y);
>> mat2ans('curve.lgw',x,y,z);
这个曲面特性太复杂,在ANSYS中不能由一张曲面构成。
所以导入ansys中会出错,还请高人多指点,谢谢。 我个人认为应该是对于复杂图形,matlab输出的时候无法把握住图形的全部特征,把需要的全部数据都属出来,写入到ansys命令流中,造成生成面时的错误。
不知道对不? matlab中生成的曲面能不能导入autocad中去呢? 太好了,非常感谢!!! 非常感谢。:lol
页:
[1]