问题
我想要可视化一条3D路径,并围绕它形成一个代表数据标准差的“云” 。我想让路径呈现为一条黑色粗线,周围均匀灰色区域,没有任何云雾状线条,就像透过云层的X光线看到的线条一样。
尝试
我使用plot3
创建了一条粗线,使用patch
在每个线段的中心点创建了一系列方块(图中还有一些额外的东西表示开始/结束和方向,我也希望它们容易被看到)。我尝试调整patch
的alpha
,但是会在线条上产生云雾状效果,使得灰色颜色的亮度随着视线中有多少个灰色盒子而变化。我希望alpha
值为1,以便每个灰色方块的颜色都完全相同,但我希望找到一种方法使线条通过云层时更均匀地显示。
最小示例
如所请求,这里是一个最小示例,生成下面的绘图。
% Create a path as an example (a circle in the x-y plane, with sinusoidal deviations in the z-axis)
t = 0:1/100:2*pi;
x = sin(t);y = cos(t);
z = cos(t).*sin(5*t);
figure;
plot3(x,y,z,'k','linewidth',7);
% Draw patches
cloud = .1*rand(size(t)); % The size of each box (make them random, "like" real data)
grayIntensity = .9; % Color of patch
faceAlpha = .15; % Alpha of patch
for i = 1:length(x)
patch([x(i) - cloud(i); x(i) + cloud(i); x(i) - cloud(i); x(i) + cloud(i); x(i) - cloud(i); x(i) + cloud(i); x(i) - cloud(i); x(i) + cloud(i)],... % X values
[y(i) - cloud(i); y(i) - cloud(i); y(i) + cloud(i); y(i) + cloud(i); y(i) - cloud(i); y(i) - cloud(i); y(i) + cloud(i); y(i) + cloud(i)],... % Y values
[z(i) + cloud(i); z(i) + cloud(i); z(i) + cloud(i); z(i) + cloud(i); z(i) - cloud(i); z(i) - cloud(i); z(i) - cloud(i); z(i) - cloud(i)],... % Z values
grayIntensity*ones(1,3),... % Color of patch
'faces', [1 2 4 3;5 6 8 7;1 2 6 5; 8 7 3 4;1 5 7 3;2 6 8 4],... % Connect vertices to form faces (a box)
'edgealpha',0,... % Make edges invisible (to get continuous cloud effect)
'facealpha',faceAlpha); % Set alpha of faces
end
很抱歉for loop中有非常长的代码段,patch
命令有相当多的参数。前三行只是通过指定中心点加上或减去立方体的一半宽度cloud(i)
来定义8个顶点的x、y和z坐标。其余部分应根据各自的注释说明。
感谢您的任何帮助!
set(gca,'Renderer','zbuffer')
,先绘制灰色的东西,然后再绘制黑色的。我不确定它是否会起作用,但是可能会... - Ander Biguri