如何用meshgrid结合两个向量生成指定规格的均匀网格矩阵obsPos
解决方案:生成均匀间隔的3列网格矩阵
我来帮你搞定这个MATLAB网格生成的需求,思路其实很直接,咱们一步步来:
核心思路拆解
- 生成坐标向量:因为网格单元是1㎡,所以x方向覆盖0到50米(包含端点)的所有整数点,y方向覆盖0到20米的所有整数点,用MATLAB的冒号运算符就能快速生成。
- 生成完整网格点集合:用
meshgrid把x、y向量转换成二维网格,再把二维数组展平成列向量,就能得到所有网格点的x和y坐标。 - 拼接成目标矩阵:把x坐标列、y坐标列,再加上全0的第三列,组合成
obsPos矩阵。
完整代码示例
% 定义参数 obsXlimit = 50; % x方向尺寸(单位:米) obsYlimit = 20; % y方向尺寸(单位:米) gridSpacing = 1; % 网格间隔(单位:米) % 生成x、y方向的坐标向量 xCoords = 0:gridSpacing:obsXlimit; yCoords = 0:gridSpacing:obsYlimit; % 生成网格点的笛卡尔积 [X, Y] = meshgrid(xCoords, yCoords); % 展平成列向量,并拼接全0列得到obsPos obsPos = [X(:), Y(:), zeros(length(X(:)), 1)];
代码细节说明
xCoords = 0:1:50会生成[0,1,2,...,50]共51个点,yCoords生成[0,1,...,20]共21个点,最终obsPos是1071×3的矩阵(51×21=1071个网格点)。meshgrid(xCoords, yCoords)生成两个21×51的二维数组,分别对应每个网格顶点的x和y坐标。X(:)和Y(:)把二维数组按列展平成列向量,zeros(length(X(:)),1)生成和坐标列长度一致的全0列,最后用方括号拼接成三列矩阵。
扩展:生成网格中心坐标
如果你的需求是网格单元的中心坐标(而非顶点),只需要调整坐标向量的起始和结束值:
xCoords = gridSpacing/2 : gridSpacing : obsXlimit - gridSpacing/2; yCoords = gridSpacing/2 : gridSpacing : obsYlimit - gridSpacing/2;
这样生成的坐标就是每个1㎡网格的中心,比如x方向从0.5到49.5,y方向从0.5到19.5,总点数为50×20=1000个。
内容的提问来源于stack exchange,提问作者mldmnn
相关产品推荐
相关产品推荐

