我有一个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)
潜在的解决方案可能会以某种方式涉及围绕中心点的螺旋式上升,但我无法想象这是一个很好的解决方案。
答案 0 :(得分:2)
听起来像基于力量的布局的机会:
http://en.wikipedia.org/wiki/Force-based_algorithms_(graph_drawing)
当你说图形时,我假设节点相互连接,因此绘制它们使它们的线条最小交叉,以便更容易可视化图形告诉你什么似乎很重要。基于强制的布局可以帮助排列图形,使其不会受到相互交叉的许多线条的“压力”。
答案 1 :(得分:2)
图形渲染是一个难题,是许多研究的主题。
如果你想让节点成为一种捆绑而不是一排节点,那么主要的缺点是来自节点的线将被其他子节点重叠。
您可以制作方形包或圆形包。要制作方形束,请取节点数的平方根并添加一个。例如,如果你有17个节点,则正方形的边是4 + 1 = 5.所以你有一个5 x 5的正方形。将每个节点放在正方形的单元格中。
制作圆形画图画同心圆。所以第一个节点位于中心。然后计算该节点周围的虚圆。根据您需要的空间将圆圈分成不同的段数。然后在每个段的中心找到每个附加节点。
请注意,您可能希望重叠节点。根据您的界面的工作方式,重叠可能允许您在更多节点中使用。