matlab實現管道鋪設四階段的三維立體完成透視圖

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章