【发布时间】:2015-10-01 16:17:40
【问题描述】:
当我对从meshgrid 构造的数组进行子集化时,我无法弄清楚如何保持其网格网格结构。因此,您不能在对mesh 或surface 的调用中使用它。我将在构建单位球体的示例中演示这一点。
此问题可能的替代标题:
- 如何在 Matlab 中从头开始制作网格网格球体的上半部分?
- 如何使用网格来绘制网格网格的子集?
这是使用以下玩具示例激发的,该示例在 Matlab 中从头开始构造一个单位半径的球体,因此它类似于以下生成的:
[x, y, z] = sphere(100)
mesh(x, y, z)
对球体使用方程:
定义一个网格并将z 定义为:
x = linspace(-1, 1, 201);
y = linspace(-1, 1, 201);
[x, y] = meshgrid(x, y);
z = sqrt(1 - x.^2 - y.^2);
到目前为止一切顺利,除了z 采用虚值,其中球体在 xy 平面上不存在,即单位圆之外的任何位置。
现在调用mesh 会返回错误:
>> mesh(x, y, z)
Error using mesh (line 58)
X, Y, Z, and C cannot be complex.
因此,一个合乎逻辑的步骤是删除所有复杂值:
% get logical vector index where real z is
LI = z == real(z)
x = x(LI)
y = y(LI)
z = z(LI)
但现在x、y 和z 不再是3d 数组,调用mesh 会出现另一个错误:
>> mesh(x, y, z)
Error using mesh (line 58)
Z must be a matrix, not a scalar or vector.
所以,总的来说,我不知道如何在对数据进行子集化时保留 meshgrid 结构。因此,我无法从头开始生成这个球体的上半部分。
【问题讨论】:
标签: matlab