本文希望将某处管道铺设的四个阶段的完成情况通过hold on完成三维叠加,生成工程的三维完成透视图。效果类似于这样子:
管道铺设四阶段的三维立体完成透视图:
1.使用hold on命令,完成图形的三维叠加尝试过程;
2.完成各个阶段新修建管线的高亮和放大显示,并标注
阶段名称和图标各种信息。
一.mian函数
%% 使用邻接矩阵和hold on命令实现某处管道施工中的四阶段实现
adress1=[300,650;400,720;100,470;300,500;400,470;500,600;700,470;150,300;350,260;500,350;750,300;200,100;500,200;600,150]
% plot(adress1(:,1),adress1(:,2),'b*-','linewidth',3);
%1-6的管线铺设图的邻接矩阵,邻接矩阵的书写,遵循行优先原则来做填充即可。
adj_m1=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%7-9的管线铺设图
adj_m2=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%10-11的管线铺设图
adj_m3=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,1,0,1,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%12-14的管线铺设图
adj_m4=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,1,0,1,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,1;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
% 画图,直线段之间的连接, 通过邻接矩阵+plot()来完成。
% 三维空间中的叠加:邻接矩阵从不完善到完善的过程。
% plot3(node_AP(:,1),node_AP(:,2),node_AP(:,3),'b*-','linewidth',3);
% node_AP是多行三列的坐标值。
%{
figure;
for k=1:4 %图层数目
hold on;
adress1(:,3)=100*(k-1);
deplot1(adress1,adj_m);
end
%}
duixiang=[adj_m1;adj_m2;adj_m3;adj_m4];
color1={'b*-','r*-','g*-','k*-'}
figure;
for k=1:4 %图层数目
hold on;
adress1(:,3)=100*(k-1);
deplot1(adress1,duixiang,k,color1);
end
title('某处管道施工四阶段完成施工图')
xlabel('横坐标/km')
ylabel('纵坐标/km')
zlabel('z坐标/km')
二.function deplot1(adress1,duixiang,k,color1)代码:
function deplot1(adress1,duixiang,k,color1)
adj_m=duixiang((k-1)*14+1:14*k,:); %将对应的矩阵截取出来
[m,n]=size(adj_m);
for i=1:m
for j=1:n
if adj_m(i,j)==1
zhou=[]
zhou=[zhou;adress1(i,:);adress1(j,:)];
hold on;
%plot3(zhou(:,1),zhou(:,2),zhou(:,3),'b*-','linewidth',3);
plot3(zhou(:,1),zhou(:,2),zhou(:,3),color1{k},'linewidth',3);
end
end
end
end
三.实现完成效果:
四.做代码改进
改进代码主要功能:突出当前阶段的施工管道,并标注好阶段名称。
1.mian.m
%% 使用邻接矩阵和hold on命令实现某处管道施工中的四阶段实现
adress1=[300,650;400,720;100,470;300,500;400,470;500,600;700,470;150,300;350,260;500,350;750,300;200,100;500,200;600,150]
% plot(adress1(:,1),adress1(:,2),'b*-','linewidth',3);
%1-6的管线铺设图
adj_m1=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%7-9的管线铺设图
adj_m2=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%10-11的管线铺设图
adj_m3=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,1,0,1,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
%12-14的管线铺设图
adj_m4=[0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,1,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,1,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,1,0,0,1,0,0,0,0,0;
0,0,0,0,0,0,1,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,1,0,0,1,0,0;
0,0,0,0,0,0,0,0,0,1,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,1,0,1,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
0,0,0,0,0,0,0,0,0,0,0,0,0,1;
0,0,0,0,0,0,0,0,0,0,0,0,0,0;
];
% 画图,直线段之间的连接, 通过邻接矩阵+plot()来完成。
% 三维空间中的叠加:邻接矩阵从不完善到完善的过程。
% plot3(node_AP(:,1),node_AP(:,2),node_AP(:,3),'b*-','linewidth',3);
% node_AP是多行三列的坐标值。
%{
figure;
for k=1:4 %图层数目
hold on;
adress1(:,3)=100*(k-1);
deplot1(adress1,adj_m);
end
%}
duixiang=[adj_m1;adj_m2;adj_m3;adj_m4];
color1={'b*-','c*-','g*-','k*-'}
jiedian_num=[1,6;7,9;10,11;12,14] %阶段施工的线路编号区间
phrase_time={'阶段1','阶段2','阶段3','阶段4'}
figure;
for k=1:4 %图层数目
hold on;
adress1(:,3)=100*(k-1)+50;
deplot1(adress1,duixiang,k,color1,jiedian_num);
text(55,553,100*(k-1)+70,phrase_time{k});
end
title('某处管道施工四阶段完成施工图')
xlabel('横坐标/km')
ylabel('纵坐标/km')
zlabel('z坐标/km')
view(-45,45)
2.function deplot1(adress1,duixiang,k,color1)代码:
function deplot1(adress1,duixiang,k,color1,jiedian_num)
adj_m=duixiang((k-1)*14+1:14*k,:); %将对应的矩阵截取出来
% jiedian_num(k,:); %两个数
[m,n]=size(adj_m);
for i=1:m
for j=1:n
%不是当前修建的
if (adj_m(i,j)==1)
if (i>( jiedian_num(k,1)-1))&&(i<( jiedian_num(k,2)+1))
zhou=[]
zhou=[zhou;adress1(i,:);adress1(j,:)];
hold on;
%plot3(zhou(:,1),zhou(:,2),zhou(:,3),'b*-','linewidth',3);
plot3(zhou(:,1),zhou(:,2),zhou(:,3),'r*-','linewidth',3);
%当前修建的
else
zhou=[]
zhou=[zhou;adress1(i,:);adress1(j,:)];
hold on;
%plot3(zhou(:,1),zhou(:,2),zhou(:,3),'b*-','linewidth',3);
plot3(zhou(:,1),zhou(:,2),zhou(:,3),color1{k},'linewidth',3);
end
end
end
end
end
3.效果
红色部分是各个阶段新修建的管道路径编号。