样例二是更加随机的情况,可见于博主的文章:
matlab代码 画出不同位置高度的圆柱--样例二
圆柱信息:
圆心(1,1)高 1
圆心(3,1)高 2
圆心(4,3)高 3
clc close clear %圆柱上表面自变量 [a,r]=ndgrid((0:.05:1)*2*pi,[0 1]); xt=cos(a).*r;%21x2维 yt=sin(a).*r;%21x2维 %定义圆心 xx=[1;3;4]; yy=[1;1;3]; %圆柱高矩阵 zz=[1;2;3]; %中间变量 newxx=zeros(21,1); newyy=zeros(21,1); tempnewxx=newxx; tempnewyy=newyy; for j=1:3 newxx=tempnewxx; newyy=tempnewyy; for i=1:21 newxx(i,:)=xx(j,1); newyy(i,:)=yy(j,1); end %确定范围 [a,z]=ndgrid((0:.05:1)*2*pi,0:.05:zz(j,1)); x=cos(a);%21xsize(z,2)维 项数=((末项-首项)/公差)+1,这里是((1-0)/0.05)+1=21,z=1 y=sin(a);%21xsize(z,2)维 %画圆柱测面 fuzhinewxx=newxx; fuzhinewyy=newyy; for i=1:(size(z,2)-1) newxx=cat(2,newxx,fuzhinewxx); newyy=cat(2,newyy,fuzhinewyy); end surf(x+newxx,y+newyy,z,x*0) axis equal hold on %画圆柱上表面 newxx=fuzhinewxx; newyy=fuzhinewyy; for i=1:(2-1) newxx=cat(2,newxx,fuzhinewxx); newyy=cat(2,newyy,fuzhinewyy); end surf(xt+newxx,yt+newyy,xt*0,xt*0) surf(xt+newxx,yt+newyy,xt*0+zz(j,1),xt*0) end
结果: