首页 > 解决方案 > 通过使用 repmat 的 2D 曲线旋转生成 3D 绘图后提取 Z 值

问题描述

我被一个明显简单的问题困住了。我必须围绕轴旋转 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 值?

感谢您的帮助。

标签: matlab3drotationcurvesurface

解决方案


而不是bsxfun你可以使用meshgrid:

% 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])

哪个产品:

在此处输入图像描述


推荐阅读