当前位置: 首页 > 面试题库 >

预熔图手动设置力参数

包嘉懿
2023-03-14
问题内容

像这里一样,我的Prefuse图太密集而看不到任何东西。因此,我尝试了@bcr在接受的答案中建议的方法。但是,它对我不起作用。这是我尝试的:

我检索了默认设置。然后,我更改了NBodyForcefrom的第二个 参数ForceSimulator(称为Distance)和第二个
参数SpringForce(称为DefaultSpringLength),并将它们(连同其他默认值)一起输入了new ForceSimulator。但是
输出中没有任何变化。我怎么了?

这是我的代码:

This is my code:

private static void visualiseGraph(Graph graph) {
    Visualization vis = new Visualization();
    vis.add("graph", graph);
    LabelRenderer r = new LabelRenderer("someLabel");
    r.setRoundedCorner(8, 8);
    vis.setRendererFactory(new DefaultRendererFactory(r));
    ColorAction fill = new ColorAction("graph.nodes",
            VisualItem.FILLCOLOR, ColorLib.rgb(190,190,255));
    ColorAction text = new ColorAction("graph.nodes",
        VisualItem.TEXTCOLOR, ColorLib.gray(0));
    ColorAction edges = new ColorAction("graph.edges",
        VisualItem.STROKECOLOR, ColorLib.rgb(255,180,180)); 
    ActionList color = new ActionList();
    color.add(fill);
    color.add(text);
    color.add(edges);
    ActionList layout = new ActionList(Activity.INFINITY);
    Force[] originalForces = new ForceDirectedLayout("").getForceSimulator().getForces();
    ForceDirectedLayout fdl = new ForceDirectedLayout("graph"){
        @Override
        public ForceSimulator getForceSimulator() {
            ForceSimulator fs = new ForceSimulator();
            fs.addForce(new NBodyForce(originalForces[0].getParameter(0), 100, originalForces[0].getParameter(2)));
            fs.addForce(originalForces[1]);
            fs.addForce(new SpringForce(originalForces[2].getParameter(0), 100));
            return fs;
        }
    };
    layout.add(fdl);
    layout.add(new RepaintAction());
    vis.putAction("color", color);
    vis.putAction("layout", layout);
    Display display = new Display(vis) {
        @Override
        public Dimension getPreferredSize() {
            return new Dimension(W, H);
        }
    };
    display.pan(W / 2, H / 2);
    display.addControlListener(new DragControl()); // drag items around
    display.addControlListener(new PanControl());  // pan with background left-drag
    display.addControlListener(new ZoomControl()); // zoom with vertical right-drag
    JFrame frame = new JFrame("prefuse example");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(display);
    frame.pack();           
    frame.setVisible(true); 
    vis.run("color");
    vis.run("layout");
}

问题答案:

一种方法可能是添加JForcePanel,即

Swing组件,用于Force在
给定的框架中配置功能参数ForceSimulator。
在制作可视化文件时对探索不同的参数设置很有用。

这可能有助于您找到在的
实现中使用的最佳参数getForceSimulator()

ForceSimulator fsim = ((ForceDirectedLayout) layout.get(0)).getForceSimulator();
JForcePanel fpanel = new JForcePanel(fsim);
frame.add(fpanel, BorderLayout.SOUTH);

其中demos包括prefuse.demos.GraphView一个完整的示例。根据经验,某些参数似乎
取决于所选数据集具有或多或少的作用。

附录:仔细观察,我发现您的方法使内部状态fdl保持不变。而是创建一个新文件ForceSimulator,并在
布局和强制面板中使用它。下面的示例将defaultLengtha的SpringForce从更改DEFAULT_SPRING_LENGTH为42。

ForceDirectedLayout fdl = new ForceDirectedLayout("graph");
ForceSimulator fs = new ForceSimulator();
fs.addForce(new NBodyForce());
fs.addForce(new DragForce());
fs.addForce(new SpringForce(DEFAULT_SPRING_COEFF, 42));
fdl.setForceSimulator(fs);

另外,更新的SpringForce直接

ForceDirectedLayout fdl = new ForceDirectedLayout("graph");
ForceSimulator fs = fdl.getForceSimulator();
Force[] forces = fs.getForces();
SpringForce sf = (SpringForce) forces[2];
sf.setParameter(SPRING_LENGTH, 42);


 类似资料:
  • 视频、电子表格和文档支持在驱动器中预览其内容。我正在开发一个谷歌驱动器应用程序,我希望它支持预览其内容,所以有任何API在谷歌驱动器设置预览缩略图图像或嵌入在它的东西?例如,在视频中,单击预览将在播放器中显示视频,预览图像或电子表格将显示其快照。

  • 了解在升级到新版本的 Photoshop 或在不同计算机上安装 Photoshop 时,如何迁移预设、动作、增效工具、首选项和设置。 预设、设置和动作 预设是指在 Photoshop 中应用于图稿的项目和值的集合。您可以随时存储和载入预设,或将其替换为自定值。例如,动作、画笔和键盘快捷键就是预设。Photoshop 附带有预设,但是您也可以自己创建预设。 设置是指当前载入到 Photoshop 中

  • 我在对应用reduce操作时遇到了一些问题,我想将其简化为。每个AdProvider提供的优惠作为流量,我想使用流来获得所有优惠从每一个他们和连接到一个管道。我怎么可能用Reduce做到这一点?

  • 使用指南 - 数据报告 - 访问分析 - 如何设置页面点击图及热力图 如何设置页面点击图及热力图 第一步:点击“新增点击图”按钮。 注意: 1)最多可以设置10个点击图; 2)热力图和链接点击图只能查看昨天之前的数据,提供最近30天查询功能。 第二步: 1)输入点击图名称。 2)设置监控的一组页面(非必须的,需要的时候使用), 如果希望分析一组页面上的用户点击行为,可以用通配符*,设置一组监控页面

  • 我有一个表单,其中有些字段不是模型的字段。在发送到渲染之前,我想在我的视图中填充它们.. 我的表格: 我的视图代码: 谢啦

  • 问题内容: 我试图按如下所示设置按钮的可见性: 但是我得到了错误: 在通话时 我不知道该如何解决。我知道这是期望给定的一组值,但我所知道的只是将其传递给它。在这里可以做什么? 问题答案: 当您知道自己在做什么时,可以使用 例如,