Matlab 圆形颜色贴图中的插值着色

Matlab 圆形颜色贴图中的插值着色,matlab,colors,interpolation,Matlab,Colors,Interpolation,我正在绘制相位图,并使用类似hsv的圆形彩色图。我遇到的问题是在pi/-pi角度接口处,插值(MATLAB中的shading interp命令)给了我0,这导致结果图中出现奇怪的线条(见下图,下图是4切线arctan函数)。有什么办法可以去除这些文物吗?我喜欢插值着色相对于平面着色的平滑度,但是平面着色可以避免这些瑕疵 以下是生成上述图像的代码: [x_grid,y_grid] = meshgrid(-31:32,-31:32); phase = atan2(y_grid,x_grid); s

我正在绘制相位图,并使用类似hsv的圆形彩色图。我遇到的问题是在pi/-pi角度接口处,插值(MATLAB中的shading interp命令)给了我0,这导致结果图中出现奇怪的线条(见下图,下图是4切线arctan函数)。有什么办法可以去除这些文物吗?我喜欢插值着色相对于平面着色的平滑度,但是平面着色可以避免这些瑕疵

以下是生成上述图像的代码:

[x_grid,y_grid] = meshgrid(-31:32,-31:32);
phase = atan2(y_grid,x_grid);
surf(x_grid,y_grid,phase);
view(0,90);
shading interp
colorbar
axis([-31 32 -31 32])
colormap hsv

问题是,使用一组N×N的网格点在pi/-pi界面上总是会有一个不连续性,它会尝试在该界面上插值。您可以创建一个2×N的坐标带,该坐标带环绕原点,并在pi/-pi接口处断开连接。以下说明了两种方法的不连续性:

% N-by-N grid:
[x_grid, y_grid] = meshgrid(-31:32, -31:32);
phase = atan2(y_grid, x_grid);
subplot(1, 2, 1);
surf(x_grid, y_grid, phase);
title('N-by-N grid');

% 2-by-N strip:
X = [-31.*ones(1, 33) -30:31 32.*ones(1, 64) 31:-1:-30 -31.*ones(1, 32); ...
     zeros(1, 253)];
Y = [0:32 32.*ones(1, 62) 32:-1:-31 -31.*ones(1, 62) -31:0; ...
     zeros(1, 253)];
phase = atan2(Y([1 1], :), X([1 1], :));
phase(:, end) = -pi;
subplot(1, 2, 2);
surf(X, Y, phase);
title('2-by-N strip');

下面是最终二维视图的外观(具有更高分辨率的彩色贴图):


这就是你想要的,对吗@AnderBiguri我如何实现这一点来给上面的图像上色?如果您发布生成此图像所用的代码,这会有所帮助。@jodag添加了代码。
X = [-31.*ones(1, 33) -30:31 32.*ones(1, 64) 31:-1:-30 -31.*ones(1, 32); ...
     zeros(1, 253)];
Y = [0:32 32.*ones(1, 62) 32:-1:-31 -31.*ones(1, 62) -31:0; ...
     zeros(1, 253)];
phase = atan2(Y([1 1], :), X([1 1], :));
phase(:, end) = -pi;
surf(X, Y, phase);
view(0, 90);
shading interp;
colorbar;
axis([-31 32 -31 32]);
colormap(hsv(256));