2012-03-03 146 views
4

我正绘制一个有N个节点和M个边的绘图。从节点A到节点B以及节点B到A可以有一条边,所以我不能用直线画出两条线。我怎样才能让其中一个弯曲,以便与另一个区分开来?这里是我的代码,在j和k之间绘制一条直线。如何在Matlab中绘制曲线

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

回答

8

您将需要定义要绘制的中间点。

然后您可以手动定义它们,或者查看样条插值。

使用样条插值,您只需要一个中间点来确定完整曲线。

在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,其用于更大的一组点,但没有中间点。如果你只是想让你的积分顺利连接,那么值得一看。

+0

非常感谢您的回复! – Sara 2012-03-04 05:34:25

-1

而不是使一个弯曲,偏移,或以其它方式,可以使用不同linestyle S为不同的方向:1

线:plot(..., 'Linestyle', '-', 'Linewidth', 1)

2行:plot(..., 'Linestyle', '.-', 'Linewidth', 3)

这会让你的线条在不同的方向上有所区别,而不需要在空间上任意移动。

3

This function来自文件交换似乎正是你所需要的。从作者的描述:

定向(1路)边绘制成曲线虚线与曲率弯曲逆时针方向从点

如果你需要额外的功能或调整的话,应该走开简单地将代码更改为您的需求。

+0

哦谢谢它有帮助! – Sara 2012-03-05 01:14:03