【问题标题】:Combining plot and surf on the same figure (matlab)在同一个图上结合绘图和冲浪(matlab)
【发布时间】:2014-08-01 12:23:25
【问题描述】:

我想在同一张图上用 Matlab 在曲面图上绘制一些磁盘。 我的问题是计算由小圆形障碍物(圆盘)散射的波。波在网格 (X,Y) 上计算,并存储为矩阵 U。它可以使用以下命令绘制: 冲浪(X,Y,U,'EdgeColor','None','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)。确实,显示了磁盘,但正如您所见,它们中的大多数只是部分绘制...

有人有想法吗?

同样的结果发生在: - 网而不是冲浪 - 冲浪中没有选项(经典平面表示和边缘着色) - 圆盘的线宽更强或更小

提前感谢您,祝您有美好的一天!


【问题讨论】:

    标签: matlab plot


    【解决方案1】:

    问题是因为圆圈是在 z=0 处绘制的,所以它们在某些点位于表面之下

    您可以在绘图调用中指定线条的 zdata,我建议在表面的最大高度处绘制所有圆圈(更高可能会影响颜色图)

    在循环之外定义 zdata,例如

    myzdata=max(U(:))*ones(1,nb);
    

    然后在循环内部将其设置为该行的 zdata

    for p = 1:N_scat
        plot(... what you had before ...,'zdata',myzdata)
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2015-09-01
      • 2016-03-30
      • 1970-01-01
      相关资源
      最近更新 更多