matlab - 通过使用 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 值?
感谢您的帮助。
解决方案
而不是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])
哪个产品:
推荐阅读
- sql - 随机连接表并返回列
- python - 将 Python 库添加到 Docker 上的 Airflow-Puckel
- javascript - 覆盖 CompilerHost
- google-cloud-platform - 在 Google Cloud Platform 中启用基于角色的支持时遇到一些问题
- java - 三元运算符检查 null 并同时使用 .equals 设置布尔值
- python - 使用 filedialog 将数组 numpy 保存到 `.csv` 文件
- html - Bootstrap 5 汉堡图标不显示(导航栏切换图标出现问题)
- jboss - 在 JBOSS EAP 7.2 中处理粘性会话
- chart.js - Chartjs分组条形图重叠
- azure - .NET 5 迁移后 Azure devOps WebJobs 失败