Graphics 树可视化和动画

Graphics 树可视化和动画,graphics,animation,haskell,tree,Graphics,Animation,Haskell,Tree,我正在Haskell的树上使用多种搜索策略。我想将它们形象化,并为我在其中进行的搜索设置动画。到目前为止,我发现最好的方法是通过编写点文件(比如在Lisp的土地上)生成图像,但我怀疑这是否是最好的方法。我的树可能会变得很大,所以我不想在程序中输入每个节点的位置,我希望它们能够自动正确放置 我也看了一点,但我不确定是否可以在其中输入数据 另外,我的树数据类型非常基本:数据树a=Leaf a |分支(树a)(树a) 所以简而言之,我正在寻找一种在搜索策略中获得树可视化和动画的方法。我不一定要寻找一个

我正在Haskell的树上使用多种搜索策略。我想将它们形象化,并为我在其中进行的搜索设置动画。到目前为止,我发现最好的方法是通过编写点文件(比如在Lisp的土地上)生成图像,但我怀疑这是否是最好的方法。我的树可能会变得很大,所以我不想在程序中输入每个节点的位置,我希望它们能够自动正确放置

我也看了一点,但我不确定是否可以在其中输入数据

另外,我的树数据类型非常基本:
数据树a=Leaf a |分支(树a)(树a)

所以简而言之,我正在寻找一种在搜索策略中获得树可视化和动画的方法。我不一定要寻找一个以Haskell为中心的解决方案,但它可能会很棒。此外,能够以标准格式(如gif)输出图像/动画也是一大优势。

我将展开我的评论: 我还没有调查过Ubigraph的定价政策,但你可以从他们的网站下载免费版本(“基本版”)。然后您可以安装真空ubigraph包(GHC7.0下似乎有一个构建失败的HackageDB,但我刚刚成功地在我的7.0.2下安装了它,没有问题)。完成后,您只需启动
ubigraph\u服务器
,并从ghci开始使用您的数据结构“馈送”它:

import System.Vacuum.Ubigraph

data Tree a = Leaf a | Branch (Tree a) (Tree a)
data Root a = Root a

tree =
    Root
    (Branch
     (Branch
      (Leaf "A")
      (Leaf "B"))
     (Leaf "C"))
键入
视图树
,您将得到类似于:


您可以放大/缩小并旋转它。不确定它有多实用(它像显示整个Haskell对象图一样-注意shared
[]
),但有很多设置可供使用,因此您肯定可以使它看起来更好。动画似乎也受支持。

如果您选择Ubigraph路径,您可以直接使用HUbigraph绑定,例如:

import Graphics.Ubigraph
import Control.Monad

main = do
  h <- initHubigraph "http://127.0.0.1:20738/RPC2"
  runHubigraph op h

op = do
  clear
  vs <- mapM (const newVertex) [0..400]
  mapM_ (setVAttr (VShape Sphere)) vs
  let bind i = zipWithM (\a b -> newEdge (a,b)) vs (drop i vs ++ take i vs)
  mapM_ bind [1..15]
  return ()
import Graphics.Ubigraph
进口管制
main=do

h Graphviz可以为您进行布局。这不是你想要的布局吗?Lisp之地()的例子使用
dot
来进行布局,而不是手动放置节点位置。@Jeremiah:是的,我想要一种布局。但有什么方法可以使它动画化吗?只需在GUI中创建具有不同高亮/颜色的多个帧或实际的视觉动画?您看过UbiGraph吗?甚至还有关于随机二叉树的令人印象深刻的介绍:以及Haskell的绑定