使用 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])
产生:
我遇到了一个看似简单的问题。我必须围绕轴旋转 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')
如果我用
可视化 Zimagesc(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])
产生: