1

我有一个 java 组件,我在其上绘制 100 x 40 个矩形来表示图形的节点。添加新节点时,我希望能够将其定位在有用的位置。目前,我只需选择 x 轴上的下一个可用空间。但是,这意味着当我加载图表时,我会得到一大串节点跨越右侧的视图 - 不理想!

更好的解决方案可能涉及在最接近用户视图中心点的点处添加一个节点。我确信这个问题有很多解决方案,我想不出一种合理的方法来实现这一点。

我有与此问题相关的三种方法:

positionNode(Node) // which tries to find suitable x,y to place a node
setPos(x,y) // which moves a node to the respective position
findElementAt(x,y) // which returns a node's model if such a node exists at (x,y)

一个潜在的解决方案可能以某种方式涉及围绕中心点盘旋,但我无法想象一个好的解决方案来执行此操作。

4

2 回答 2

2

图形渲染是一个难题,是许多研究的主题。

如果你想将节点变成一种捆绑,而不是节点线,主要的缺点是从节点出来的线会被其他子节点重叠。

您可以制作方形束或圆形束。要制作方形束,请取节点数的平方根并加一个。例如,如果你有 17 个节点,正方形的边是 4 + 1 = 5。所以你有一个 5 x 5 的正方形。将每个节点放置在正方形的一个单元格中。

做一个圆束画同心圆。所以第一个节点位于中心。然后计算围绕该节点的假想圆。根据您需要多少空间,将圆圈按度数分成几段。然后将每个附加节点定位在每个段的中心。

请注意,您可能希望重叠节点。根据您的界面的工作方式,重叠可能允许您放入更多节点。

于 2012-09-27T15:48:18.573 回答
2

听起来像是基于力的布局的机会:

http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing )

当你说图表时,我假设节点是相互连接的,所以绘制它们,使它们的线最小地纵横交错,以便更容易可视化图表告诉你的内容似乎很重要。基于强制的布局可以帮助安排图形,使其不会受到许多线相互交叉的“压力”。

于 2012-09-27T15:00:08.670 回答