1.所有圆柱的坐标、高和半径都是随机的,在此列出代码和样例:
2.初始化函数:
define_yuanzhu.m
function [xx,yy,zz,rr]=define_yuanzhu(k,xx,yy,zz,rr)%k为圆柱个数
for j=1:k
xx(j,1)=10.*randsample(20,1);
yy(j,1)=10.*randsample(20,1);
zz(j,1)=2.*randsample(20,1);
rr(j,1)=randsample(20,1);
end
3. 主函数:
testh.txt
clc
close
clear
%定义圆柱个数
m=10;
%定义圆心
xx=zeros(m,1);
yy=zeros(m,1);
%圆柱高矩阵
zz=zeros(m,1);
%圆柱半径矩阵
rr=zeros(m,1);
%初始化
[xx,yy,zz,rr]=define_yuanzhu(m,xx,yy,zz,rr);
%中间变量
newxx=zeros(21,1);
newyy=zeros(21,1);
tempnewxx=newxx;
tempnewyy=newyy;
for j=1:m
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).*rr(j,1);%21xsize(z,2)维 项数=((末项-首项)/公差)+1,这里是((1-0)/0.05)+1=21
y=sin(a).*rr(j,1);%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
%画圆柱上表面
%圆柱上表面自变量
[a,r]=ndgrid((0:.05:1)*2*pi,[0 rr(j,1)]);
xt=cos(a).*r;%21x2维
yt=sin(a).*r;%21x2维
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
4.截图:(3次结果都是随机的)