[r,t] = meshgrid(linspace(0,2*pi,361),linspace(0,pi,361));
[x,y]=pol2cart(sin(t)*cos(r),sin(t)*sin(r));
%[x,y]=pol2cart(r,t);
surf(x,y);
我玩过这个addon但试图为此找到一个默认函数。如何绘制 3D 极坐标图?
我试图帮助这个人可视化不同的积分 here .
最佳答案
您的代码中存在几个问题:
- 您已使用
sin(theta)*cos(phi)
和sin(theta)*sin(phi)
位将球坐标转换为笛卡尔坐标。为什么要为此调用 pol2cart(而且,我们不在极坐标中工作!)? - 正如 natan 指出的,您的绘图中没有第三维(即
z
)。对于单位半径,在球面域中可以省略r
,它完全由theta
和phi
定义,但在笛卡尔域中,您拥有全部三个x
、y
和z
。z
的公式为z = cos(theta)
(单位半径)。 您没有阅读
surf
的文档,其中表示:surf(Z,C)
plots the height ofZ
, a single-valued function defined over a geometrically rectangular grid, and uses matrixC
, assumed to be the same size asZ
, to color the surface.换句话说,您的
surf(x,y)
行仅绘制矩阵x
并使用y
作为颜色图为其着色。
这是上面的代码,错误已修复并正确绘制:
[f,t] = meshgrid(linspace(0,2*pi,361),linspace(0,pi,361));
x = sin(t)*cos(f);
y = sin(t)*sin(f);
z = cos(t);
surf(x,y,z)
关于matlab - 为什么不是球形图?如何在 Matlab 中绘制 3D 极坐标图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14227914/