我有一个java组件,我在上面画了100乘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)
一个潜在的解决方案可能会以某种方式围绕中心点螺旋上升,但我无法想象有一个好的解决方案来实现这一点。
图形渲染是一个难题,也是许多研究的主题。
如果你想把节点做成一个束,而不是一行节点,主要的缺点是从节点出来的线会被其他子节点重叠。
你可以做一个方形捆或圆形捆。要制作一个平方束,请取节点数的平方根并加一。例如,如果有17个节点,则正方形的边数为4+1=5。所以你有一个5 x 5的正方形。将每个节点放置在正方形的单元中。
使一个圆束画同心圆。所以第一个节点在中心。然后计算一个围绕该节点的假想圆。根据需要的空间大小,将圆分为若干段。然后将每个附加节点定位在每个线段的中心。
请注意,您可能希望重叠节点。根据您的接口工作方式,重叠可能允许您在中安装更多节点
听起来像是一个基于部队布局的机会:
http://en.wikipedia.org/wiki/Force-based_algorithms_(图形绘制)
当你说图形时,我假设节点是相互连接的,所以绘制它们,使它们的线最小程度地纵横交错,从而更容易可视化图形告诉你的内容,这似乎很重要。基于强制的布局可以帮助排列图形,这样它就不会受到很多线相互交叉的"压力"。