我有一个管半径r
的分布,我想在单个图中绘制所有采样的r
的管,如上图所示。该管具有以下特点:
所有 pipe 的长度都是恒定的,但半径是变化的。
最窄的 pipe 将被完全充满 颜色为浅灰色。
所有其他 pipe 中从底部开始的浅灰色长度是 与管的半径成反比,即
从底部开始的浅灰色长度=常数/r
pipe 的剩余长度将填充深灰色。
r
的大小和每根 pipe 的总长度约为1e-005
m 和1e-002
m ,因此需要与 X 和 Y 轴单位进行标准化。白色的空隙只是空间而不是 pipe 。
更新(基于鲍里斯的回答)
这是 Boris 的代码,我根据上面描述的 pipe 的特性进行了某些更改。我遇到了缩放问题,因为我无法像上图所示那样清晰地可视化我的管道网络。
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
最佳答案
例如,可以使用一个简单的函数来绘制灰色管
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
是 pipe 的x位置,w
表示宽度,h
表示0
之间100
pipe 浅灰色部分的高度。
您现在可以通过调用在示例中使用它
drawGrayTube (x, r, 100*constant/r)
您必须调整常量,使 constant/r
最多为 1
。
您可以为白色间隙编写类似的函数。
假设您给出了一个半径向量(已进行缩放,使得值介于 0 和 1 之间),例如,r=[0.5, 0.7, 0.9, 0.1, 0.5, 0.01]
那么绘制 pipe 的可能性是
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
关于matlab - 我怎样才能在Matlab中绘制这个管网?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8531200/