matlab代码 画出不同位置高度的圆柱--样例

时间:2021-10-05 04:18:56
样例二是更加随机的情况,可见于博主的文章: 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

结果:

matlab代码 画出不同位置高度的圆柱--样例