我想用Matlab在一张表面图上绘制一些磁盘,在同一图上。 我的问题是计算由小圆形障碍物(磁盘)散射的波。波在网格(X,Y)上计算,并存储为矩阵U.可以使用以下命令绘图: 冲浪(X,Y,U,'EdgeColor','无','facecolor','interp'); 这会导致nice picture like this(我无法在stackoverflow上传图像)
现在,我想在同一张图片上添加磁盘。请注意,“O”是磁盘中心的矩阵,“a”是磁盘半径的向量,N_scat是磁盘的数量。
hold on
surf(X,Y, U, 'EdgeColor','None', 'facecolor', 'interp');
theta = [1:361]*2*pi/360;
nb = length(theta);
for p = 1:N_scat
plot(O(1,p).*ones(1,nb) + a(p).*cos(theta), O(2,p).*ones(1,nb) + a(p).*sin(theta), 'k', 'LineWidth', 1)
end
hold off
view(2);
colorbar;
然而,这部分地给出了期望的结果(picture here)。实际上,显示了磁盘,但正如您所看到的,大多数磁盘只是部分绘制...
有人有想法吗?
同样的结果发生在: - 网格而不是冲浪 - 没有海浪选择(经典的平面表示和边缘彩色) - 磁盘的线宽更宽或更小
提前感谢您,祝您有个美好的一天!
答案 0 :(得分:2)
问题是因为圆圈是在z = 0处绘制的,因此它们在某些点处位于表面下
您可以在绘图调用中指定行的zdata,我建议在曲面的最大高度处绘制所有圆(任何更高的圆都可能影响颜色图)
在循环外定义zdata,例如
myzdata=max(U(:))*ones(1,nb);
然后在循环内设置它为行
的zdatafor p = 1:N_scat
plot(... what you had before ...,'zdata',myzdata)
end