我有一些随机生成图表的代码。它生成一个线性链接的5个节点的子图,如下所示:
a -- b -- c -- d -- e
然后选择2个随机非相邻节点链接在一起,我最终得到这样的东西(没有2个“a”节点,最后一个节点只引用第一个节点,创建一个循环):< / p>
a -- b -- c -- d -- e -- a
重复n次以产生5个节点的n个图形,然后所有这些图形随机链接在一起产生这样的东西,如果n = 2
a1--b1
b1--c1
c1--d1
d1--e1
e1--a1 (a 5-node loop)
a2--b2
b2--c2
c2--d2
d2--e2
a2--d2 (a 4-node loop with a 5th node, e2, hanging off of node d2)
a3--b3
b3--c3
c3--d3
d3--e3
a3--c3 (a 3-node loop with a 2-node tail)
e1--d2 (1st graph is connected to 2nd graph at random nodes creating 1 larger graph)
a2--a3 (2nd graph is connected to 3rd graph, creating a chain of 3 sub-graphs)
所有5节点子图的列表被混洗,然后通过将随机图中的随机节点与下一个随机选择的图中的随机节点连接,逐个连接,从而创建一个图形链。这是一个更复杂的更长图形的例子,可以生成,颜色编码以显示每个5节点子图的排列方式:
现在,我需要一种算法来在2D平面上布置此图形,而没有任何链接相互交叉。我该怎么做?
我不正在寻找生成png或任何其他类型图像文件的第三方应用程序。我不是在寻找将点指向WPF控件的第三方控件。为了我的目的,我需要每个节点的x,y坐标,它需要有一些均匀的间距。我知道这听起来有点模糊和主观,但我不知道我正在寻找的正确术语。我只是说这些不工作:
我需要它更接近这样的东西: