如何在Matlab中画曲线?

4

我正在绘制一个具有N个节点和M条边的图形。可以从节点A到节点B,也可以从节点B到节点A,因此我不能使用直线来绘制这两条线。为了区分它们,我该如何使其中一条曲线呢?下面是我用于在j和k之间绘制一条直线的代码:

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

3个回答

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

结果图

splined2 中,它用于更大的点集,但没有中间点。如果您只想让您的点平滑连接,那么可能值得一看。


3
这个函数来自文件交换中心,似乎正是你所需要的。根据作者的描述:

有向(单向)边被绘制为曲线虚线,并且弯曲度向逆时针弯曲,远离一个点

如果你需要额外的功能或调整,更改代码以满足你的需求应该很简单。


-1

不必制作一个弯曲的、偏移的或其他形状,您可以为不同的方向使用不同的linestyle

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

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

这样可以使您在不需要在空间中进行任意移动的情况下区分不同方向的线条。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接