在Matlab中创建2D圆形网格

时间:2014-12-27 02:03:31

标签: matlab geometry mesh polar-coordinates

我在y = 0的水平线(x,y,数据)(2991 * 3)上有一些数据。 我不想在笛卡尔坐标系中绘制直线,而是将该直线转换为四分之一圆,并以一系列颜色绘制数据。

我可以创建一个网格

rho = x
theta = (0:0.5:90)*pi/180
[th, r] = meshgrid(theta,rho);

我遇到的问题是在2D中绘制圆圈并将数据链接到网格。 任何提示都会非常受欢迎!

enter image description here

1 个答案:

答案 0 :(得分:2)

说明:

您对meshgrid的来电正是您想要的。您只需生成与thr条目对应的数据矩阵。 您的数据取决于r的值,因为这是行中值增加的矩阵,

r = [rho(1), rho(1), ..., rho(1);
     rho(2), rho(2), ..., rho(2);
     rho(3), rho(3), ..., rho(3);
     ...                        ];

您需要转换颜色data,因此它们对应于此矩阵。 这可以通过生成矩阵的repmat(data(:), 1, size(r,2))来完成,以便i行只包含值data(i)

[data(1), data(1), ..., data(1);
 data(2), data(2), ..., data(2);
 data(3), data(3), ..., data(3);
 ...                           ];

这样,这些值对应于r行所给出的半径。

最终结果:

您的最终脚本将如下所示:

%% Example data
x = (2:0.1:8);
data = sin(x);

%% Shift the values towards the center, so you get a circle instead of an annulus.
rho = x-min(x);

%% Your meshgrid generation code.
theta = (0:0.5:90)*pi/180;
[th, r] = meshgrid(theta, rho);

%% Plotting the values
surf(min(x)+r.*cos(th), ...
     min(x)+r.*sin(th), ...
     repmat(data(:), 1, size(th,2)), ...
     'linestyle', 'none'); 
view(2);
axis equal tight;
colorbar;

,输出如下所示:Output from function