使用 repmat 通过 2D 曲线旋转生成 3D 图后提取 Z 值

Extracting Z values after 3D plot is generated by 2D curve revolution with repmat

我遇到了一个看似简单的问题。我必须围绕轴旋转 360° 2D 曲线,以获得 3D 图。说,我想用这个正弦函数来做:

z = sin(r);
theta = 0:pi/20:2*pi;
xx = bsxfun(@times,r',cos(theta));
yy = bsxfun(@times,r',sin(theta));
zz = repmat(z',1,length(theta));
surf(xx,yy,zz)
axis equal

我现在想可视化存储在矩阵中的 Z 平面的数值。我通常会这样做:

ch=get(gca,'children')
X=get(ch,'Xdata')
Y=get(ch,'Ydata')
Z=get(ch,'Zdata')
 

如果我用

可视化 Z
imagesc(Z)

我没有获得绘图 Z 的实际值,而是“未旋转”的投影。我怀疑这与我生成曲线的方式有关,事实上我没有

类型的函数
zz = f(xx,yy)

有什么方法可以得到xx和yy的网格值,以及每个网格点的zz值吗?

感谢您的帮助。

您可以使用 meshgrid:

而不是 bsxfun
% The two parameters needed for the parametric equation
h  = linspace(0,2) ;
th = 0:pi/20:2*pi ;
[R,T] = meshgrid(h,th) ;
% The parametric equation
%    f(x)    Rotation along Z
%     ↓           ↓
X = sin(R)  .*  cos(T) ;
Y = sin(R)  .*  sin(T) ;
% Z = h
Z = R ;
surf(X,Y,Z,'EdgeColor',"none")
xlabel('X')
ylabel('Y')
zlabel('Z')

产生:

如果你想在 X 平面 (X = 0) 上提取轮廓,你可以使用 contour:

contour(Y,Z,X,[0,0])

产生: