Как я могу уменьшить количество линий сетки, показанных на графике поверхности? - PullRequest
0 голосов
/ 17 ноября 2018

Я нашел этот ответ , но я не могу завершить свою работу.Я хотел точнее изобразить функции, которые я изучаю, не перекрашивая свою функцию черными чернилами ... что означает уменьшение количества линий сетки.Я уточняю, что функции являются сложными.

Я попытался добавить к своему уже существующему коду работу, написанную по ссылке выше.Вот что я сделал:

r = (0:0.35:15)';                        % create a matrix of complex inputs
theta = pi*(-2:0.04:2);
z = r*exp(1i*theta);
w = z.^2;

figure('Name','Graphique complexe','units','normalized','outerposition',[0.08 0.1 0.8 0.55]);

s = surf(real(z),imag(z),imag(w),real(w));    % visualize the complex function using surf
s.EdgeColor = 'none';

x=s.XData;
y=s.YData;
z=s.ZData;

x=x(1,:);
y=y(:,1);
% Divide the lengths by the number of lines needed
xnumlines = 10; % 10 lines
ynumlines = 10; % 10 partitions
xspacing = round(length(x)/xnumlines);
yspacing = round(length(y)/ynumlines);
hold on
for i = 1:yspacing:length(y)
    Y1 = y(i)*ones(size(x)); % a constant vector
    Z1 = z(i,:);
    plot3(x,Y1,Z1,'-k');
end
% Plotting lines in the Y-Z plane
for i = 1:xspacing:length(x)
    X2 = x(i)*ones(size(y)); % a constant vector
    Z2 = z(:,i);
    plot3(X2,y,Z2,'-k');
end
hold off

Но проблема в том, что меш все еще невидим.Как это исправить?В чем проблема?И, может быть, вместо рисования сетки, возможно, можно нарисовать круги и радиусы, как изначально на графике?

Ответы [ 2 ]

0 голосов
/ 17 ноября 2018

Я нашел свой старый сценарий, где я сделал более или менее то, что вы ищете.Я адаптировал его к радиальному графику, который у вас есть.

В этом сценарии есть два трюка:

  1. Поверхностный график содержит все данные, но потому что нетНарисованная сетка, детали этой поверхности трудно увидеть (ваши данные довольно гладкие, это особенно верно для более неровной поверхности, поэтому я добавил немного шума в данные, чтобы показать это).Чтобы улучшить видимость, мы используем интерполяцию для цвета и добавляем источник света.

  2. Нарисованная сетка является версией субдискретизированных исходных данных.Поскольку исходные данные являются радиальными, свойства XData и YData не являются прямоугольной сеткой, и поэтому нельзя просто взять первую строку и столбец этих массивов.Вместо этого мы используем полные матрицы, но строки выборки для рисования окружностей и столбцы выборки для рисования радиусов.

resulting plot

% create a matrix of complex inputs
% (similar to OP, but with more data points)
r = linspace(0,15,101).';
theta = linspace(-pi,pi,101);
z = r * exp(1i*theta);
w = z.^2;

figure, hold on

% visualize the complex function using surf
% (similar to OP, but with a little bit of noise added to Z)
s = surf(real(z),imag(z),imag(w)+5*rand(size(w)),real(w));
s.EdgeColor = 'none';
s.FaceColor = 'interp';

% get data back from figure
x = s.XData;
y = s.YData;
z = s.ZData;

% draw circles -- loop written to make sure the outer circle is drawn
for ii=size(x,1):-10:1
   plot3(x(ii,:),y(ii,:),z(ii,:),'k-');
end

% draw radii
for ii=1:5:size(x,2)
   plot3(x(:,ii),y(:,ii),z(:,ii),'k-');
end

% set axis properties for better 3D viewing of data
set(gca,'box','on','projection','perspective')
set(gca,'DataAspectRatio',[1,1,40])
view(-10,26)

% add lighting
h = camlight('left');
lighting gouraud
material dull
0 голосов
/ 17 ноября 2018

Как насчет этого подхода?

[X,Y,Z] = peaks(500) ;

surf(X,Y,Z) ;
shading interp ;
colorbar

hold on

miss = 10 ;  % enter the number of lines you want to miss
plot3(X(1:miss:end,1:miss:end),Y(1:miss:end,1:miss:end),Z(1:miss:end,1:miss:end),'k') ;
plot3(X(1:miss:end,1:miss:end)',Y(1:miss:end,1:miss:end)',Z(1:miss:end,1:miss:end)','k') ;
...