[matlab] добавление линий на поверхность

scorobei42ru

Есть необходимость выделить на виде поверхности сверху (т.е. картинка двумерная - прямоугольник XY закрашен, цвет отвечает значению функции Z) некоторую линию в плоскости XY, заданную массивами (x,y) координат точек, принадлежащих этой линии. делаю это так:
surf(X,Y,Z,'EdgeColor','none');
axis tight; colormap(jet); view(0,90);
hold on;
value=max(max(Z;
[X1 Y1]=meshgrid(x,y);
Z1=zeros(n,n);
for i=1:n
Z1(i,i)=value+1;
end
surf(X1,Y1,Z1);
здесь X,Y,Z - сетка и значения основной поверхности. n-длина массивов координат, задающих линию. То есть я рисую поверх первой поверхности вторую, у которой везде уровень 0, а в точках линии превосходит на 1 максимальный уровень первой поверхности. Простыми манипуляциями с colormap добиваюсь нужного цвета. Получается весьма прерывистая линия, состоящая из кусков каркасной сетки (то есть если установить 'EdgeColor' равным 'none', то линии видно вообще не будет).
Как можно получить более качественный результат?

Boris

plot3(x,yvalue+1)*ones(size(x

scorobei42ru

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

Boris

спасибо. сам пробовал plot3 - не получалось. получив совет решил повозиться подольше и нашел, что если сначала рисовать линию с помощью plot3, а только потом поверхность, то все получится. а вот если сначала поверхность, а на нее пытаться наложить линию - ничего не видно. видимо, это баг такой. по крайней мере, не удалось найти никакой логики в таком положении вещей.
Хм, и правда.
Такого поведения я раньше не замечал.

simara72

Может, толщину увеличить?

scorobei42ru

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

Jeton89

Думаю, что это не проблема. Ведь даже для двумерных графиков, от порядка вывода будет зависеть какая из двух кривых будет сверху в точке их пересечения.
Правда интересно, если добавить небольшое приращение по z для твоей кривой, она появится?

scorobei42ru

нет, не появится, как ни играй с приращениями. именно поэтому я склоняюсь к мнению, что это баг.

makei

я бы рисовал все это с помощью функций image и line:
figure;
image(Z);
hold on;
line(x,y);
п.с. этот метод подойдет только в случае равномерной сетки

makei

видимо баг старой версии.. в R2012b, все рисует корректно
Оставить комментарий
Имя или ник:
Комментарий: