Skip to content

Instantly share code, notes, and snippets.

@ChuckieChen945
Created December 26, 2023 11:42
Show Gist options
  • Save ChuckieChen945/2fc7880a497d1b534d790139b31f802b to your computer and use it in GitHub Desktop.
Save ChuckieChen945/2fc7880a497d1b534d790139b31f802b to your computer and use it in GitHub Desktop.
用于在Matlab中画出闽师大图书馆
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%绘制圆柱体部分
[x,y,z]=cylinder(1,50);%产生半径为1,边数为50的圆柱
%改造圆柱,使之与图书馆外形匹配
xt=[x(1,1:3),0.9602,0.7123,0.7123,0.7123,0.9156,x(1,5:6),0.7822,0.6636,0.6369,x(1,[8,8:19,19]),-0.6363,-0.6363,x(1,21:22),-0.9156,-0.6994,-0.6994,-0.6944,-0.9636,x(1,24:28),-0.9609,-0.6994,-0.6994,-0.6994,-0.9166,x(1,30:31),-0.6363,-0.6363,x(1,[33,33:44,44]),0.6369,0.6636,0.7822,x(1,46:47),0.9166,0.7123,0.7123,0.7123,0.9611,x(1,49:51)];
yt=[y(1,1:3),0.2796,0.2780,0.2820,0.4021,0.4021,y(1,5:6),0.6231,0.6231,0.6231,y(1,[8,8:19,19]),0.5975,0.5878,y(1,21:22),0.4021,0.4021,0.2769,0.2690,0.2673,y(1,24:28),-0.2770,-0.2770,-0.3845,-0.4000,-0.4000,y(1,30:31),-0.5878,-0.5975,y(1,[33,33:44,44]),-0.6231,-0.6231,-0.6231,y(1,46:47),-0.4000,-0.4000,-0.2820,-0.2763,-0.2763,y(1,49:51)];
t1=2*pi/76;%改造后的圆柱边缘共 76 个点,t1 用于产生 中空正方形边上的 76 个点
t2=0.2054./cos([10:-1:1]*t1).*sin([10:-1:1]*t1);%正方形的 一部分 x 分量
t3=0.2639./cos([1:8]*t1).*sin([1:8]*t1);%正方形的一部分 y 分量
a=[linspace(0.2639,0.2639,9),t2,0,-fliplr(t2),linspace(-0.2639,-0.2639,17),-t2,0,fliplr(t2),linspace(0.2639,0.2639,9)];%构造正方形的 x 分量
b=[0,t3,linspace(0.1918,0.1918,21),fliplr(t3),0,-t3,linspace(-0.1918,-0.1918,21),-fliplr(t3),0];%正方形%构 造正方形的 y 分量
t4=[xt(1:13),1.0745.*xt(14:25),xt(26:50),1.0745.*xt(51:62),xt(63:77)];%构造图书馆 3、4 楼突起部分的外形 x 分量
t5=[yt(1:13),1.0745.*yt(14:25),yt(26:50),1.0745.*yt(51:62),yt(63:77)];%y 分量
t6=zeros(2,77);%z 分量之一
t7=linspace(1,1,77);
t8=0.0827:0.0827:0.5696;
[t7,t8]=meshgrid(t7,t8);%t7为辅助作用,用于构造等高线, 将等高线存入 t8,作为 z 分量
zt=[t6;t8([1,2],:);linspace(0.2208,0.2208,77);linspace(0.2208,0.2208,77);t8([3:5],:);linspace(0.4588,0.4588,77);linspace(0.4588,0.4588,77);t8(6,:);linspace(0.6056,0.6056,77);linspace(0.6056,0.6056,77);t6(1,:)];%构造整体的 z 分量
mesh([a;xt;xt;xt;xt;t4;t4;t4;t4;t4;xt;xt;xt;a;a],[b;yt;yt;yt;yt;t5;t5;t5;t5;t5;yt;yt;yt;b;b],zt);
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%绘制正方体部分
xq=[-1.2054,-1.1785:0.0827:-0.6363,-0.6363];
yq=[-0.2777,-0.2087:0.0827:0.2087,0.2736];
[xq,yq]=meshgrid(xq,yq);
xq(1,1)=-1.1785;
xq(8,1)=-1.1785;
yq(1,1)=-0.2087;
yq(8,1)=0.2048;
t9=ones(8,9);
zq1=t9.*0.3398;
zq2=t9.*0.6056;
mesh(xq,yq,zq1);%画出上下两个面
hold on;
mesh(xq,yq,zq2);
hold on;
xq=[xq(:,1)',xq(1,2:8),xq(:,9)',fliplr(xq(1,1:8))];
yq=[fliplr(yq(:,1)'),yq(1,2:8),yq(:,9)',fliplr(yq(8,1:8))];
zq1=[linspace(1,1,31)];
zq2=[0.3398:0.0827:0.6056,0.6056];
[zq1,zq2]=meshgrid(zq1,zq2);
mesh([xq;xq;xq;xq;xq],[yq;yq;yq;yq;yq],zq2);%绘制立面
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%绘制圆盘部分
[xp,yp]=meshgrid(x(1,:),y(1,:));
for i=1:1:51%由程序将正方形网格移成圆形
for j=1:1:51
m=i;
n=j;
while(sqrt(xp(m,n)*xp(m,n)+yp(m,n)*yp(m,n))>1.01)
if xp(m,n)>0
if yp(m,n)<0
m=m+1;
else
m=m-1;
end
else
if yp(m,n)<0
m=m+1;
else
m=m-1;
end
end
end
xp(i,j)=xp(m,n);
yp(i,j)=yp(m,n);
end
end
xp=xp.*1.1299;
yp=yp.*1.1299;
mesh(xp,yp,ones(51).*0.1140);
mesh(xp,yp,ones(51).*0.1499);%绘制上下两个面
xp=[x.*1.1299];
yp=[y.*1.1299];
zp=[z(1,:)+0.1140;z(2,:).*0.1499];
mesh(xp,yp,zp);%绘制立面
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%绘制阶梯部分
m=[-1.0111,-1.1785,-1.2595,-1.3367,-1.4275,-1.4923,-1.5834,-1.6434,-1.7455,-1.7455,-1.6434,-1.5834,-1.4923];
m=[m,fliplr(m),x(1,[29:-1:23]).*1.1299,-1.0111];
m=[m;m];
n=[0.5044,0.3369,0.3076,linspace(0.2990,0.2990,6),0.1292,0.1187,0.1018,0.0586];
n=[n,-fliplr(n),y(1,[29:-1:23]).*1.1299,0.5044];
n=[n;n];
t1=[0.1119,0.0739,0.0739,0.0359];
t2=[linspace(0.1499,0.1499,4),0.1119,t1,fliplr(t1),t1,fliplr(t1),0.1119,linspace(0.1499,0.1499,12)];
k=[t2;t2-0.0359];
mesh(m,n,k);
hold on;
m1=[-1.0111,-1.0111;-1.1758,-1.1785;-1.2595,-1.2595;-1.3367,-1.3367;-1.4275,-1.4275;-1.4923,-1.4923];
n1=[0.5044,-0.5044;0.3369,-0.3369;0.3076,-0.3076;0.2990,-0.2990;0.2990,-0.2990;0.2990,-0.2990];
k1=[ones(4,2).*0.1499;0.1119,0.1119;0.1119,0.1119];
mesh(m1,n1,k1);
hold on;
mesh(m1,n1,k1-0.0359);
hold on;
m2=[-1.4923,-1.4923;-1.5834,-1.5834;-1.6434,-1.6434;-1.7455,-1.7455];
n2=[0.2990,0.0586;0.2990,0.1018;0.2990,0.1187;0.2990,0.1292];
k2=[0.1119,0.1119;0.0739,0.0739;0.0739,0.0739;0.0359,0.0359];
mesh(m2,n2,k2);
hold on;
mesh(m2,n2,k2-0.0359);
hold on;
mesh(m2,-n2,k2);
hold on;
mesh(m2,-n2,k2-0.0359);
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%其他
map=jet(16);
%cl=16;%可设置 16 种颜色(1-16)
%map1=map(cl,:);
%colormap(map1);
alpha(0.8);%调节透明度(0-1)
axis equal;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment