Как нарисовать изогнутую линию в Matlab - PullRequest
4 голосов
/ 03 марта 2012

Я рисую график, который имеет N узлов и M ребер. Может быть ребро от узла A к узлу B, а также от узла B к A, поэтому я не могу использовать прямую линию, чтобы нарисовать обе линии. Как сделать один из них изогнутым, чтобы его можно было отличить от другого? Вот мой код, который рисует одну прямую линию между j и k.

line([Xloc(j) Xloc(k)], [Yloc(j) Yloc(k)], 'LineStyle', '-');

Ответы [ 3 ]

9 голосов
/ 03 марта 2012

Вам нужно будет определить, какие промежуточные точки вы хотите нарисовать.

Затем вы можете определить их вручную или взглянуть на сплайн-интерполяцию.

При сплайн-интерполяции вам нужна только одна промежуточная точка для определения полной кривой.

В MATLAB вы можете найти демо spline2d, которое делает что-то вроде этого. Вот суть этого:

% end points
X = [0 1];
Y = [0 0];
% intermediate point (you have to choose your own)
Xi = mean(X);
Yi = mean(Y) + 0.25;

Xa = [X(1) Xi X(2)];
Ya = [Y(1) Yi Y(2)];

t  = 1:numel(Xa);
ts = linspace(min(t),max(t),numel(Xa)*10); % has to be a fine grid
xx = spline(t,Xa,ts);
yy = spline(t,Ya,ts);

plot(xx,yy); hold on; % curve
plot(X,Y,'or')        % end points
plot(Xi,Yi,'xr')      % intermediate point

Resulting plot

В splined2 он используется для большего набора точек, но без промежуточных точек. Если вы просто хотите, чтобы ваши точки были гладко соединены, возможно, стоит взглянуть на них.

3 голосов
/ 03 марта 2012

Эта функция из File Exchange, кажется, именно то, что вам нужно. Из описания автора:

Направленные (односторонние) края изображены в виде изогнутых пунктирных линий, кривизна которых изгибается против часовой стрелки, удаляясь от точки

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

0 голосов
/ 03 марта 2012

Вместо создания одного изогнутого, смещенного или иного, вы можете использовать разные linestyle s для разных направлений:

Строка 1: plot(..., 'Linestyle', '-', 'Linewidth', 1)

Строка 2: plot(..., 'Linestyle', '.-', 'Linewidth', 3)

это сделает ваши линии в разных направлениях различимыми, не требуя произвольного сдвига в пространстве.

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