matlab自带的cylinder函数可以生成变截面半径的圆柱面,但是不能生成轴线是曲线的圆柱面。
若想用matlab生成轴线是曲线的圆柱面可以在轴线不同位置处生成垂直轴线切线方向的空间圆,然后借助surf命令生成轴线弯曲的曲面。
也可利用类似的方法生成扫掠曲面
代码如下:
function Draw_3D_SweepCurve(x,y,z,nL,nc,RL,E,Emax,interpFlag,ClosedFlag)
if interpFlag==0
elseif interpFlag==1
% 对曲线轴线方向插值
[~,x,y,z]=D3_B_Curve_interp(x,y,z,nL);
% 轴线颜色插值
Ex=linspace(1,size(E,1),size(E,1))';
Ec=linspace(1,size(E,1),nL)';
E=interp1(Ex,E,Ec,'Spline');
end
N=nc;
t=linspace(0,2*pi,N);
u=[1,0,0];v=[0,1,0];
for i=1:size(x,1)-1
axis_vec=[x(i+1)-x(i) y(i+1)-y(i) z(i+1)-z(i)];axis_vec=axis_vec/norm(axis_vec);
xc(i,:)=RL*u(1,1)*cos(t)+RL*v(1,1)*sin(t);
yc(i,:)=RL*u(1,2)*cos(t)+RL*v(1,2)*sin(t);