如何在Matlab中绘制曲线

时间:2012-03-03 04:03:28

标签: matlab

我正在绘制一个有N个节点和M个边缘的图。从节点A到节点B以及节点B到A可以有一条边,所以我不能用直线画两条线。如何使其中一个弯曲以便与另一个相区别?这是我在j和k之间绘制一条直线的代码。

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

3 个答案:

答案 0 :(得分:9)

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

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

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

在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中,它用于更大的点集,但没有中间点。如果您只是希望您的积分能够顺利连接,那么可能值得一看。

答案 1 :(得分:3)

来自File Exchange的

This function似乎正是您所需要的。从作者的描述:

  

定向(单向)边缘绘制为曲线虚线,曲率弯曲逆时针移动远离点

如果您需要额外的功能或调整,根据您的需要更改代码应该很简单。

答案 2 :(得分:-1)

您可以针对不同的方向使用不同的linestyle来代替弯曲,偏移或其他方式:

第1行:plot(..., 'Linestyle', '-', 'Linewidth', 1)

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

这将使你的不同方向的线条可以区分,而不需要任意的空间移位。