MATLAB绘制非矩形参数域圆柱曲面的代码修改咨询
非矩形参数域圆柱曲面的MATLAB绘制方法
针对你需要绘制参数域为0<z<1+sin(theta)的圆柱曲面,fsurf无法直接适配非矩形参数域,这里提供两种可行的实现方案:
方案一:精准生成符合参数域的采样点
通过为每个theta单独生成对应范围的z值,再展开为一维数组计算坐标:
clc; clear % 生成theta的采样点,数量越多曲面越平滑 theta = linspace(0, 2*pi, 100); % 为每个theta生成0到1+sin(theta)的z采样点 z_list = arrayfun(@(t) linspace(0, 1+sin(t), 50), theta, 'UniformOutput', false); % 将theta和z展开为一维数组,匹配坐标计算需求 theta_expanded = repmat(theta, 50, 1); theta_expanded = theta_expanded(:); z_expanded = cell2mat(z_list'); z_expanded = z_expanded(:); % 计算圆柱曲面的x,y,z坐标 x = cos(theta_expanded); y = sin(theta_expanded); z = z_expanded; % 绘制曲面并美化 surf(x, y, z) xlabel('x') ylabel('y') zlabel('z') title('参数域0<z<1+sin(\theta)的圆柱曲面') axis equal shading interp % 可选,让曲面颜色过渡更平滑
方案二:网格过滤法(直观易理解)
先生成覆盖最大可能范围的矩形网格,再将不满足参数域条件的点设为NaN(MATLAB绘图会自动忽略NaN点):
clc; clear % 生成theta和z的采样网格 theta = linspace(0, 2*pi, 100); z = linspace(0, 2, 100); % z的最大值为2(当sin(theta)=1时) [Theta, Z] = meshgrid(theta, z); % 筛选出满足0<z<1+sin(theta)的点,不满足的设为NaN mask = Z < 1 + sin(Theta); Theta(~mask) = NaN; Z(~mask) = NaN; % 计算坐标并绘制 X = cos(Theta); Y = sin(Theta); surf(X, Y, Z) xlabel('x') ylabel('y') zlabel('z') title('参数域0<z<1+sin(\theta)的圆柱曲面') axis equal shading interp
两种方案都能实现需求,方案一没有冗余点,效率更高;方案二逻辑直观,容易调整参数。
内容的提问来源于stack exchange,提问作者ಠ_ಠ
相关产品推荐
相关产品推荐

