【问题标题】:creating a 2D circular mesh in Matlab在 Matlab 中创建二维圆形网格
【发布时间】:2014-12-27 02:03:30
【问题描述】:

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

我可以创建一个网格

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

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

【问题讨论】:

  • 选择原始x,y网格中x^2 + y^2
  • 我喜欢这个数字。单独的文字太模棱两可了,但这样我就得到了你想要的。
  • 谢谢。我想如果我知道如何解释它,我就能做到;)!沿线的数据比那要复杂一点,但总体思路就是图。

标签: matlab geometry mesh polar-coordinates


【解决方案1】:

解释:

您对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)) 来完成,它会生成一个矩阵,因此ith 行只包含值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;

输出将如下所示:

【讨论】:

  • 感谢您的回答,这也很有趣,但这并不是我的想法。我已经编辑了我的问题(我添加了一个图来准确显示我的想法)。
  • 非常感谢。这正是我正在寻找的“repmat”选项。我会记住这一点的!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多