Remove a "plane" from my 3d plot

When I plot the surface it results into the surface itself but there is something weird in the middle of the surface, I mean it's kind like it is in the xy plane, I do not know how to remove it, here is my code:
clear
figure, hold on
[x,y]=meshgrid(-50:50)
xlabel ("x");
ylabel ("y");
zlabel ("z")
z=sqrt(9*(y.^2)-9*(x.^2))
w=-sqrt(9*(y.^2)-9*(x.^2))
surf(x,y,real(z))
surf(x,y,real(w))
zlim([-150,150])

3 comentarios

Ravi Narasimhan
Ravi Narasimhan el 14 de Oct. de 2021
Editada: Ravi Narasimhan el 14 de Oct. de 2021
If x^2 > y^2, won't the real part of your square root be 0?
davidcu
davidcu el 14 de Oct. de 2021
I have tried with that restriction, but I got this error "mesh: X, Y, Z arguments must be real". Or in what way do I have to write the restriction?
Ravi Narasimhan
Ravi Narasimhan el 14 de Oct. de 2021
Editada: Ravi Narasimhan el 14 de Oct. de 2021
You could perhaps set any value of real(z) or real(w) = 0 to NaN (Not a Number) using the find function. Those items wouldn't display on the surface plot, leaving a space between the top and bottom halves. It would look like
z(find(real(z) == 0)) = NaN;
The find function returns the indices where real(z) == 0 and the z(find(...)) = NaN sets those positions in the z array to NaN
You'd tweak it accordingly for w.
Addendum: Posted while @DGM's answer came in.

Iniciar sesión para comentar.

 Respuesta aceptada

DGM
DGM el 14 de Oct. de 2021
You could try to clip off the excess points with NaN and be left with a gap in the surface at the joint, or you could just avoid the problem entirely.
Consider this:
N = 50;
th = linspace(0,2*pi,N);
r = linspace(-50,50,N).';
[x z y] = pol2cart(th,r,r);
z = z*3; % your example stretches on z
h = surf(x,y,z);
set(h,'facealpha',0.8,'edgealpha',0.5)
axis equal
xlabel ("x");
ylabel ("y");
zlabel ("z")

Más respuestas (0)

Preguntada:

el 14 de Oct. de 2021

Editada:

el 14 de Oct. de 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by