java - 高效的 2D 径向重力布局 (Java)

标签 java layout graphics box2d gravity

我正在寻找一种高效的 2D 映射算法,并且尝试了多种实现,但它们似乎都缺乏。我希望 stackoverflow 世界能够帮助我提供一些现有的、经过反复测试的算法的指导,我可以从中学习。

我的目标是根据写作风格来显示文章;对于原型(prototype),我使用哲学、编程、政治和诗歌,因为这是我仅有的四种写作风格。

每篇文章都根据每个类别进行加权,并且主页 View 将每个类别作为每个角的标题。然后,这些文章以类似词云的格式排列,“人工重力”将每个项目尽可能靠近其主要类别(或在其主要类别之间),而不重叠。

目前,我正在使用一种低效的算法,该算法存储矩形数组,以便在每次将文章添加到 View 时执行 HitTest 和搜索(使用 A* 搜索模式来查找要填充的空白空间)。通过为相同权重的所有文章近似一个单一目的地,并使用循环队列从每个池中挑选文章,我可以获得新的结果(数组按权重排序,然后按时间戳排序),并按定位相关性(“人工重力”)。

但是,使用 A* 盲目搜索似乎确实很浪费,即使使用启发式方法让每篇文章首先检查最接近其目标标记的情况也是如此。我需要一种更有效的方法来迭代 2D 空间。

我想知道链表方法是否可以更好地工作;我可以迭代连接的节点来询问每个节点是否有 a) 附近的可用空间,或 b) 其他要询问的连接节点(并且始终首先询问最近的节点),而不是盲目地向各个方向搜索空白空间。 .

如果有任何更好的算法可用,或者对我的方法提出批评,我们将不胜感激。

我在这个 gui 中使用 gwt elemental + java,但是任何语言的任何 2D 映射算法肯定会有帮助。

[编辑(请求更多详细信息)]:这里的主要问题是每个新添加项执行的工作量;它在 ui 线程中产生明显的故障,特别是当几乎没有剩余空间时,因为我正在给定半径内搜索许多点以获得足够的可用空间来容纳文章。

如果我过早地切断算法,我就会得到本来可以被填补的空白点。如果我让它运行太久,用户界面就会出现严重故障,我确信用户会讨厌它。

存储和修改 2D 空间集合的最快/最有效的方法是什么?

最佳答案

您没有提供足够的信息来说明什么可以使算法“更好”。快点?产生的布局在某些质量指标上“更好”?能够处理更大的数据源?

数组当然没有问题,A* 也没有问题。如果他们对于你试图解决的问题的规模给出了可以接受的结果,他们怎么会是“浪费”呢?仅当链接数据结构降低了经常需要的操作的成本时,它们才有值(value)。

如果你尖锐化问题,你就更有可能得到有用的答案。

无论如何,有大量关于“图形布局”和“图形绘制”的文献。尝试搜索这些术语。如果您可以将所需的布局表示为节点和边的集合,则这些可能适用。许多都是基于模拟 Spring 系统,这似乎与您正在做的事情类似。

关于java - 高效的 2D 径向重力布局 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12416760/

相关文章:

java - 如何替换JSON的最后一个索引项

java - 安息 JsonPath : flat array of elements in hierarchy

html - 为什么如果我不明确地明确设置此 div 的高度,它会向上扩展并低于前面的元素?

xml - Import-StartLayout *.xml 不是有效的布局文件

algorithm - 我是否可以始终假设角值 !=1 的 mvp 矩阵正在执行缩放?

java - 通过反射调用 Oracle JDBCPreparedStatement 方法失败

java - 我应该更喜欢类内的最终静态变量还是静态方法内的最终变量

css - 如何使容器内的 div 仅使用 bootstrap 3 中 12 列中的 6 列?

java - Canvas 和 JPanel 的区别

c++ - opengl中灯光的区别