Surf function with interp: symmetric surface shown assymmetrically
3 次查看(过去 30 天)
显示 更早的评论
Hello All,
I have a surface Z formed by the following commands (very simplified version) and it is symmetric in XY plane (looking from the top or bottom). However when I use the "surf" command with 'interp', I get a slightly assymetric surface.
clc
clear all
Z=[0 0.1 0.3 0.1 0;
0 0.2198 0.4432532 0.2198 0;
0 0.4242 0.7898989 0.4242 0;
0 0.2198 0.4432532 0.2198 0;
0 0.1 0.3 0.1 0];
[X,Y] = meshgrid(0:1.5:6,0:1.5:6);
surf(X, Y, Z, 'LineStyle', '-', 'FaceColor', 'interp')
daspect([1,1,0.2])
colormap(jet)
colorbar
When I use decimal numbers instead of the Z values above though, I do not get such a problem.
Any ideas how to obtain the symmetric surface at XY plane?
Cheers.
2 个评论
Bruno Luong
2018-11-17
IMO Parula does not releal defect as clear as JET (which I still prefer in general)
采纳的回答
Bruno Luong
2018-11-17
编辑:Bruno Luong
2018-11-17
The color interpolation carried out by MATLAB is not symetric by values but also by order. This induces the defect.
To trick MATLAB you have te reorganize the data
Z=[0 0.1 0.3 0.1 0;
0 0.2198 0.4432532 0.2198 0;
0 0.4242 0.7898989 0.4242 0;
0 0.2198 0.4432532 0.2198 0;
0 0.1 0.3 0.1 0];
[X,Y] = meshgrid(0:1.5:6,0:1.5:6);
x = linspace(-1,1,size(Z,2));
y = linspace(-1,1,size(Z,1));
close all
hold on
for k=1:4
if k<=2
ix = find(x>=0);
else
ix = flip(find(x<=0));
end
if mod(k,2)==0
iy = find(y>=0);
else
iy = flip(find(y<=0));
end
surf(X(iy,ix), Y(iy,ix), Z(iy,ix), 'LineStyle', '-', 'FaceColor', 'interp')
end
daspect([1,1,0.2])
colormap(jet)
colorbar
Defect coloring when using single SURF command
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Colormaps 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!