本文希望將某處管道鋪設的四個階段的完成情況通過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.效果
紅色部分是各個階段新修建的管道路徑編號。