2012-06-01 6 views
2

Скажем, у меня есть следующий сценарий:MATLAB участок часть поверхности

u = -5:.2:5; 
[X,Y] = meshgrid(u, u); 
Z = cos(X).*cos(Y).*exp(-sqrt(X.^2 + Y.^2)/4); 
surf(X,Y,Z); 

есть в любом случае, что я могу сделать MatLab участок только части поверхности? Скажем, например, я просто хочу построить одну точку или одну сетку, что я могу сделать? Я думал, что, возможно, построить единую точку я мог бы использовать:

surf(X(1,1), Y(1,1), Z(1,1)) 

Но тогда я получаю сообщение об ошибке:

??? Error using ==> surf at 78 
Data dimensions must agree. 

Я действительно ценю некоторые ввода/помощь здесь. Заранее спасибо :)

ответ

6

Когда я попробовать то, что вы пробовали, я получаю следующее:

прибой (X (1,1), Y (1,1), Z (1 , 1))
Ошибка при использовании серфинга (строка 75) Z должна быть матрицей, а не скаляром или вектором.

Таким образом, проблема в том, что вы не можете сделать только точку или линию с помощью surf, вы должны использовать другую функцию. Но вы можете выбрать подобласти

>> ii=1:5; 
>> jj=1:20; 
>> surf(X(ii,jj),Y(ii,jj),Z(ii,jj)) 

Другой способ сделать это состоит в использовании в качестве пренебрежимо малых маски.

>> mask = ones(size(X)); 
>> mask(1:20, 20:end) = nan; 
>> surf(X.*mask, Y.*mask, Z.*mask) 

Это приведет к тому, что детали, в которых присутствуют NAN, не отображаются.

+0

Отлично! Большое спасибо за ваш ответ! – Kristian

1

Чтобы отобразить только одну точку, вам может понравиться функция scatter3, предназначенная для облаков точек.

scatter3(X(1,1), Y(1,1), Z(1,1)) 

Конечно, он также работает с векторами точек X, Y, Z. Вы также можете напрямую указать размер и цвет точки для каждой точки.

+0

Спасибо большое! Очень ценю ваш вклад. – Kristian

Смежные вопросы