只能说你太懒,M矩阵就是这个啦,你看到就是A-B连接起来,A-C连接,B-A连接,C-A,C-D,C-E连接起来就完啦,数据合法性检查就是看M是不是5*5的矩阵,画图中不会的命令就查HELP
这个是我以前编的代码,但后来好像问题被度娘给吃了。
其实你如果只是想要使用的话,后面绘图部分可以不用管,只要定义前面的节点和邻接矩阵就可以了——可以支持任意多节点和连接线(前提是数据要合法,即矩阵应为n*n的)。
如果想研究实现的思路,我简单说一说吧:
1、基本思路:
把节点均匀分布在一个圆上(半径为R),每个节点也用一个小圆圈表示(半径为r),然后根据邻接矩阵把相应的节点连线,并用箭头表示连接方向。
2、绘制节点部分:
X、Y是画节点小圆圈的数据,在循环体里面的xc、yc为节点所在位置,也就是小圆圈的中心。然后小圆圈用patch画,并在圆圈中心标明节点名称(垂直和水平都是居中对齐)。
axis equal是把横、纵坐标设为等比(否则圆会显示成椭圆)。
axis off 关闭坐标系显示(否则背景会出现坐标系的框和坐标轴数据,不好看)。
3、连接线部分:
这部分其实没太多好说的,就是判断两个节点如果有连接,就在二者之间画条线,并且用箭头标出方向来。
画线的时候,要考虑到节点处还有个小圆圈,不能直接从节点中心连线,而应该考虑从小圆圈的边缘连接,这样,就需要计算在小圆圈上的坐标。计算坐标得到的是X、Y。然后,根据希望的箭头夹角,求出箭头的线条坐标即Xa、Ya,最后,把连接线和箭头的数据合并画线(用NaN隔开,使得连接线从视觉上和箭头是断开的)。
至于说求那些坐标,是需要花点时间把几何关系搞清楚的。当时我也是调了好半天才搞好,开始的时候大致推了一下就编程实现,位置总是不对头,后来认真在纸上推了公式才搞好。
希望对你有帮助。