Matlab中的3D绘图

Posted

技术标签:

【中文标题】Matlab中的3D绘图【英文标题】:3D Plot in Matlab 【发布时间】:2011-11-12 23:31:17 【问题描述】:

我正在尝试通过将极坐标转换为笛卡尔坐标并使用surf() 来绘制 3D 极坐标图。

问题:我收到错误 ??? CData must be an M-by-N matrix or M-by-N-by-3 array。我哪里做错了?我对 MATLAB 很陌生,不明白发生了什么。

MATLAB 代码

全部清除; 全部关闭;

N=50;
%define matrices for ploting
x=zeros(N,N,N);
y=zeros(N,N,N);
z=zeros(N,N,N);
f=zeros(N,N,N);

%define basic input variables
r=linspace(0,2,N);
theta=linspace(0,pi,N);
phi=linspace(0,2.*pi,N);

for ii=(1:N) %use ii, jj to avoid confusion with the imaginary units
    for jj=(1:N)
        for kk=(1:N)
            x(ii,jj,kk)=r(ii).*sin(theta(jj)).*cos(phi(kk)); %%not using 
            %%for loop probably can work too, test later
            y(ii,jj,kk)=r(ii).*sin(theta(jj)).*sin(phi(kk));

            z(ii,jj,kk)=r(ii).*cos(theta(jj));

            f(ii,jj,kk)=r(ii).*exp(-r(ii)).*cos(theta(jj));
        end
    end
end

figure;
surf(x,y,z,f);
colormap([1,1,1]);

【问题讨论】:

【参考方案1】:

surf 绘制一个曲面:因此每个 (x,y) 点都有一个高度 z。

例如

N=50;
[X Y] = meshgrid(linspace(0,2,N));
Z = zeros(size(X));

for ii=(1:N)
    for jj=(1:N)
        x = X(ii,jj);
        y = Y(ii,jj);
        [theta, r] = cart2pol(x,y);
         Z(ii,jj) =r * exp(-r) * cos(theta);
    end
end

figure;
surf(X,Y,Z);

【讨论】:

以上是关于Matlab中的3D绘图的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB中的绘图函数有那几种颜色呀?

Python中的图形绘制——3D绘图

我应该如何更新 Matlab 中的绘图数据?

matlab 2016 绘图中的标准 RGB 颜色

根据 julia 中的数据绘制 3d 表面(使用绘图)

MATLAB绘图笔记——画立方体的几种方法