如何在Matlab中绘制这个管网?

时间:2011-12-16 07:41:10

标签: matlab networking drawing

enter image description here

我有一个管半径r的分布,我想在单个图中为所有采样的r绘制管子,如上图所示。管具有以下特征:

  • 所有管的长度是恒定的,但半径是变化的。

  • 最窄的管子将被完全填满 浅灰色。

  • 所有其他管子底部的浅灰色长度是 与管半径成反比,即

    length of light grey color from bottom = constant/r

  • 管的剩余长度将填充深灰色。

  • r的大小和每根管的总长度分别为1e-005 m和1e-002 m,所以它们需要与X相比标准化和Y轴单位。

  • 白色空隙只是空间而不是管。

更新(根据鲍里斯的回答)

这是Boris的代码,我在其中根据我上面描述的管的特性做了一些改变。我有缩放问题,因为我无法清楚地看到我的电子管网络,如上图所示。

function drawGrayTube (x, r, sigma_wn, theta, del_rho, rmin, rmax,L)
% sigma_wn is in N/m (=Kg/s^2), theta is in degrees, del_rho is in Kg/m^3
% and L is in m
h=((2*sigma_wn*cos((pi/180)*theta))./(del_rho*9.81.*r));
hmin=((2*sigma_wn*cos((pi/180)*theta))./(del_rho*9.81.*rmax));
hmax=((2*sigma_wn*cos((pi/180)*theta))./(del_rho*9.81.*rmin));

rectangle ('Position',[x,0,r/rmax,h], 'FaceColor',[0.7,0.7,0.7]);
ylim([0 1]);

if L>h
    rectangle ('Position',[x,L,r/rmax,L-h], 'FaceColor',[0.3,0.3,0.3]);
    ylim([0 1]);
else
    rectangle ('Position',[x,L,r/rmax,L], 'FaceColor',[0.3,0.3,0.3]);
    ylim([0 1]);
end

end

2 个答案:

答案 0 :(得分:6)

绘制灰色管的简单功能可以是例如

function drawGrayTube (x, w, h)
    rectangle ('Position',[x,0,w,h], 'FaceColor',[0.7,0.7,0.7]);
    rectangle ('Position',[x,h,w,100-h], 'FaceColor',[0.3,0.3,0.3]);
end

此时,x是指针的x位置,w表示宽度,h表示0100浅灰色的高度管的一部分。

您现在可以通过调用

在您的示例中使用它
drawGrayTube (x, r, 100*constant/r)

您必须调整常量,以使constant/r最多为1

您可以为白色间隙编写类似的函数。

假设您已经给出了一个半径矢量(已经缩放,使得值介于0和1之间),例如,r=[0.5, 0.7, 0.9, 0.1, 0.5, 0.01]然后是绘制管的可能性

interspace = 0.5;
for i=1:length(r)
    drawGrayTube(sum(r(1:i-1))+i*interspace, 100*r(i)+1e-10, r(i)+1e-10); 
end

答案 1 :(得分:-1)

您应该使用函数rectangle