MATLAB: Meshgrid multi-valued function data

multi-valued meshgridsphere

If I have data z = f(x,y) which have at some (or all) (x,y) coordinates more than a value for z. How can I represent the corresponding z value for the X and Y mesh grid, where [X Y] = meshgrid(x,y). I also wonder how this is handled in sphere function. For example: >> [x y z] = sphere(50) , surf(x,y,z) Since x,y,z meshgrids are not in the normal format of mesh grids?

Best Answer

You should use hold on to plot multiple parts. The code below is a fix to your code.
radius=3;
x = linspace(-radius,radius,100);
y = linspace(-radius,radius,100);
[X,Y] = meshgrid(x,y);
Z = sqrt(radius^2 - X.^2 - Y.^2);
Z(imag(Z)~= 0) = 0 ;
%set coordinates outside of the sphere to the edge
L=(X.^2+Y.^2)>(radius^2);
phi=atan2(Y,X);
X(L)=radius*cos(phi(L));
Y(L)=radius*sin(phi(L));
%put the two halves together
Z = [Z,-Z];
X = [X,X];
Y = [Y,Y];
figure(1),clf(1)
surf(X,Y,Z)