Когда я подмножу массив, построенный из meshgrid
, я не могу решить, как сохранить его структуру meshgrid. Таким образом, вы не можете использовать его при вызове mesh
или surface
. Я продемонстрирую это в моем примере построения единичной сферы.Сохранять структуру meshgrid при подмножестве meshgrid
Возможные альтернативные названия для этого вопроса:
- Как сделать верхнюю половину meshgrid области с нуля в Matlab?
- Как вы используете сетку для построения подмножества meshgrid?
Это мотивировано, используя следующую игрушку пример построения сферы единичного радиуса в 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
при подмножестве данных. Следовательно, я не могу сгенерировать верхнюю половину этой сферы с нуля.
Спасибо. Теперь я сталкиваюсь с другой проблемой при попытке использовать 'slice': координаты входных точек должны быть конечными; Inf и NaN не допускаются. – Alex
Использование NaN не является идеальным в любом случае. Возможно, вы могли бы взглянуть на эту [ссылку] (http://de.mathworks.com/matlabcentral/newsreader/view_thread/169373), чтобы узнать, как правильно сгенерировать сферу, используя сферическую координату phi и theta. Чтобы создать половину сферы, я бы изменил код в ссылке на 'phi = linspace (0, pi/2,30);' – MinF
К сожалению, сферические координаты не помогают мне с данными, которые у меня есть. Возвращаясь к примеру сферы, я думаю, что было бы трудно получить поверхность, сформированную путем разрезания сферы с использованием диагональной плоскости. Концептуально лучший способ сделать это - использовать подмножество, но если вы выполните подмножество, оно разрушит структуру сетки. – Alex