当我对从meshgrid
构造的数组进行子集化时,我无法弄清楚如何保持其网格网格结构。因此,您无法在调用mesh
或surface
时使用它。我将在构建单位球体的例子中证明这一点。
此问题的可能替代标题:
这是出于以下玩具示例的动机:在Matlab中从头开始构建单位半径的球体,这样就像生成的那样:
[x, y, z] = sphere(100)
mesh(x, y, z)
使用球体的等式:
定义meshgrid并将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
结构。因此,我无法从头开始生成该球体的上半部分。
答案 0 :(得分:3)
一般情况下,您可以排除"通过使用 NaN 值来保持矩阵结构的绘图值。在你的情况下,试试这个:
LI = z == real(z);
z(~LI) = NaN;
mesh(x,y,z);