【MATLAB】关于给水管网的管线连接

本人最近把毕设中管网部分做完了,正在忙水厂设计部分,趁着闲暇摸鱼时间琢磨起如何用matlab把给水管网的管线通过代码连接,当然,本代码只适用于想对管线进行模拟计算或者为了更好地展现的情况,若想真正实现一键生成节点和管段管线,可以考虑自学鸿业,据导师所言,其可以实现自动绘图的功能。

效果图

代码

clc;clear; warning off;
Data=readtable("test.xlsx");
%数据存取
Node=Data{:,1};
X=Data{:,2};
Y=Data{:,3};
Pipe=Data{:,4:6};
%归一化数据
x0=X-min(X);
y0=Y-min(Y);
%画坐标
figure(1);
set(gcf,'unit','centimeters','position',[1 1 32 20]);
hold on;
plot(x0,y0,'.r');
%画直线
for i=1:size(Pipe,1)
    tmp=string(Data{i,5:6});
    ibegin=find(string(Node)==tmp(1));
    iend=find(string(Node)==tmp(2));
    plot([x0(ibegin),x0(iend)],[y0(ibegin),y0(iend)],'k-');
end
%美化及保存
axis off;hold off;
saveas(gcf,'管线图','png');

代码解释

1、readtable函数用来读取xlsx数据,本案例中excel文件内容如下:

 以上数据是通过EPANET软件导出并加以整理后得到的。

2、数据存取就是matlab特殊的语法,就是把第几列存放到变量当中;归一化是为了方便作图,画出来的图与坐标原点(0,0)相差不远。

3、画坐标里,fugure是设置画窗,set函数是设置画布,hold on是为了能同时画节点和管线以防覆盖,plot就是正式画点。

4、画直线的部分就是代码核心:

① tmp就是读取第五列和第六列数据,并将其对于的下标暂时存取在ibegin,iend里;

tmp=string(Data{i,5:6});
ibegin=find(string(Node)==tmp(1));
iend=find(string(Node)==tmp(2));

② 直接连线!

plot([x0(ibegin),x0(iend)],[y0(ibegin),y0(iend)],'k-');

结语

这只是本人摸鱼时想出来的,没有进行过多的修饰和美化,仅在此留作记录,然后还可以和contour()函数联用,有奇效。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值