Tracé de surface Julia 3D comme Matlab, palette de couleurs à l'échelle logarithmique

Aug 16 2020

J'essaie de tracer un tracé de surface 3D comme la figure ci-dessous (source : Wikipedia ):

Voici ma tentative en julia;

x  = [-2:0.05:2;]
y = [-1:0.05:3;]
z = (1 .-x').^2 .+ 100 .*(y.-x'.^2).^2

minZ = minimum(z[:]);  
maxZ = maximum(z[:]);

c =  minZ .+ (maxZ-minZ).*log.(1 .+z .- minZ) ./ log(1+maxZ-minZ)
Plots.plot(x,y,z,st=:surface,color=cgrad(:jet,c),
xlabel = "x",ylabel="y",zlabel="f(x,y)")

Voici mes questions :

  1. Comment puis-je faire en sorte que la carte des couleurs de l'intrigue de Julia apparaisse comme Matlab, même l'échelle logarithmique ne fonctionne pas.
  2. La vue (caméra) pour l'azimut et l'élévation du tracé Matlab est (-30,30) tandis que l'option de caméra du tracé julia ne fonctionne pas du tout. camera = (-30,30). Les valeurs négatives ne semblent pas fonctionner en cameraoption. Comment puis-je faire en sorte que la vue (option x et y) ressemble à matlab.

Pour le code Matlab de référence :

clear all;
close all;
hfig = figure(1);

s = 0.05;
X = [-2 : s : 2+s];
Y = [-1 : s : 3+s];
[X, Y] = meshgrid(X, Y);
Z = (1-X).^2 + 100*(Y-X.^2).^2;

% Use log scale of Z for a batter usage of the color spectrum  
minZ = min(Z(:));  
maxZ = max(Z(:));
C = minZ + (maxZ-minZ).*log(1+Z-minZ)./log(1+maxZ-minZ); 


colormap(jet);
surf(X, Y, Z, C, 'EdgeColor', 'none', 'LineStyle', 'none');
 
axis([-2, 2, -1, 3, 0, 2500]);
xlabel('x', 'fontsize', 18);
ylabel('y', 'fontsize', 18);
zlabel('f', 'fontsize', 18);

Merci

Réponses

1 PrzemyslawSzufel Aug 16 2020 at 01:36

Peut-être cela sera-t-il utile ?

pyplot()
Plots.plot(x,y,z,st=:surface,color=Colors.diverging_palette(20,300,40, logscale=true,  wcolor=colorant"red",dcolor1=colorant"green", dcolor2=colorant"red", b=0.1,d1=1.0,d2=1.0),
       xlabel = "x",ylabel="y",zlabel="f(x,y)",camera=(-30,30))