如何用Matlab的meshgrid与surf函数创建3D伪球面(曳物线)
错误原因
- 你代码中计算得到的
z是一维行向量,和meshgrid生成的二维矩阵x、y维度不匹配,拼接为S的操作不会修改z本身的维度结构,因此传入surf时触发报错。 - 额外逻辑错误:你最初对
x、y的悬链线坐标转换计算是无效的,后续调用meshgrid时直接覆盖了x、y的取值,没有用到你预设的坐标转换逻辑。
修正代码
你需要先生成二维参数网格,再基于网格逐点计算三个坐标值,保证三者维度一致,满足surf的入参要求:
v = linspace(0,2*pi); w = linspace(0,5); % 先生成参数网格 [V,W] = meshgrid(v,w); % 基于网格逐点计算坐标 x = cos(V)./cosh(W); y = sin(V)./cosh(W); z = W - tanh(W); % 绘图 h = surf(x,y,z); set(h,'edgecolor','none') colormap summer
运行上述代码即可生成你需要的3D悬链面效果。
内容的提问来源于stack exchange,提问作者Antoni Parellada
相关产品推荐
相关产品推荐

