MATLAB绘制圆锥曲面图出现间隙,求闭合解决方法
解决MATLAB绘制圆锥曲面的间隙问题
间隙出现的核心原因是你定义的theta范围为-pi:0.1:pi,这个序列的首尾端点(-π和π)在几何上是同一个角度位置,但在数组中是两个独立元素,surf函数不会自动将这两个端点连接,导致曲面出现缺口。
解决办法很简单,只需要让theta的取值覆盖完整一圈且首尾闭合,有两种常用方式:
方式一:将theta范围改为0到2π
直接用0到2π的角度范围,首尾的0和2π是同一个几何点,surf会自动闭合曲面:
clearvars; close all; clc; % 修改theta的范围为0到2π [theta, r] = meshgrid(0:0.1:2*pi, -4:0.1:6); x = (r-1).*cos(theta); y = (r-1).*sin(theta); z = r; % 3-D plot figure surf(x, y, z); xlabel("x"); ylabel("y"); zlabel("z"); zlim([0 8]); axis square
方式二:给原theta序列添加首尾重合的端点
如果想保留原有的-pi到pi范围,只需在序列末尾追加第一个元素(-pi),让数组首尾对应同一个几何点:
clearvars; close all; clc; % 给theta序列添加首尾重合的端点 theta_seq = [-pi:0.1:pi, -pi]; [theta, r] = meshgrid(theta_seq, -4:0.1:6); x = (r-1).*cos(theta); y = (r-1).*sin(theta); z = r; % 3-D plot figure surf(x, y, z); xlabel("x"); ylabel("y"); zlabel("z"); zlim([0 8]); axis square
两种方式都能让曲面的缺口闭合,你可以根据习惯选择其中一种。
内容的提问来源于stack exchange,提问作者kene02
相关产品推荐
相关产品推荐

