在Matlab冲浪图中移动补丁的“锚点”

时间:2017-05-03 15:08:36

标签: matlab surf

MWE低于

我正在使用Matlabs surf函数绘制能量表面。我首先在各种方位角和仰角处创建我的数据点,接下来我使用通常的球 - π - 方程将它们转换为(x,y,z)坐标,并将坐标重新整形为矩阵。

然而,当我绘制这个时,我发现所有数据点都表示为颜色“补丁”的左下角,而不是颜色补丁的中心。

然而,当我缩放表面的半径以反映该点处的能量时,由于这种效应,表面中的任何凹坑都会弄乱颜色,即在可视化中数据的任何对称性都会丢失。 I would like this dimple to have roughly symmetrical color around the deepest point here.

显示的示例是从球形坐标转换为笛卡尔坐标转换为两个数据点之间角度差的一半 - 这意味着补丁以右侧点为中心,但着色仍然关闭。

有没有办法将彩色色块“居中”在数据拍摄的确切方向上?

scaling = 100;
min_val = 0.5

count = 1;
azstep = 10;
elstep = 10;

az = 0:azstep:360;
el = -90:elstep:90;
for ii = 1:length(az)
    for jj = 1:length(el)
        if any(az(ii) == [260 270 280]) && any(el(jj) == [-10 0 10])
            r_output(count) = 0.8;
        else
            r_output(count) = 1;
        end
        c(count) = r_output(count);
        r(count) = 1 + scaling.*(r_output(count)/min_val) - scaling;
        x(count) = (r(count)) .* cosd(el(jj)) .* cosd(az(ii));
        y(count) = (r(count)) .* cosd(el(jj)) .* sind(az(ii));
        z(count) = (r(count)) .* sind(el(jj));
        count = count + 1;
    end
end

X = reshape(x,length(el),length(az));
Y = reshape(y,length(el),length(az));
Z = reshape(z,length(el),length(az));
C = reshape(c,length(el),length(az));

figure
hold on

surf(X,Y,Z,C)
colorbar
axis equal
xlabel('X axis'); ylabel('Y axis'); zlabel('Z axis');

Result from code above

1 个答案:

答案 0 :(得分:0)

更改阴影!

在代码末尾添加shading interp会产生以下图像:

enter image description here

如果您想要线路,请将冲浪呼叫更改为:

h=surf(X,Y,Z,C)
colorbar
shading interp
set(h','edgecolor','k')

shading将删除它们。

enter image description here

请注意,在某些角落仍然会有一些人工制品。它们似乎是在插值时由浮点误差生成的,因此改进它们的唯一方法似乎只是制作一个更密集的球体。