Дерево визуализации и анимации - PullRequest
3 голосов
/ 11 марта 2011

Я работаю с несколькими стратегиями поиска на деревьях в Haskell.Я хочу визуализировать их, а также оживить поиск, который я делаю в нем.Лучшее, что я нашел на данный момент - это graphviz изображений, которые я мог бы создать, написав файлы DOT (как в Land of Lisp), но я сомневаюсь, что это лучший подход.Мои деревья могут стать довольно большими, поэтому я не хочу вводить положение каждого узла в моей программе, я хочу, чтобы они правильно размещались автоматически.

Я также немного посмотрел на Gephi но я не уверен, смогу ли я ввести в него свои данные.

Также мой тип данных Tree очень прост: data Tree a = Leaf a | Branch (Tree a) (Tree a).

Короче говоря, яищу способ получить в нем древовидную визуализацию и анимацию по стратегии поиска.Я не обязательно ищу решение, ориентированное на Haskell, но оно может быть великолепным.Кроме того, возможность выводить изображения / анимацию в стандартном формате, таком как gif, будет большим плюсом.

Ответы [ 2 ]

3 голосов
/ 11 марта 2011

Я расширю свой комментарий: Я не исследовал ценовую политику Ubigraph, но вы можете скачать бесплатную версию с их сайта («базовую»?). Затем вы можете установить пакетuum-ubigraph (похоже, что при сборке HackageDB под GHC 7.0 произошел сбой сборки, но мне только что удалось установить его под мой 7.0.2 без проблем). Как только это будет сделано, вы можете просто запустить ubigraph_server и начать «кормить» его структурами данных прямо из 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"))

Введите view tree, и вы получите что-то похожее на:

enter image description here

Вы можете увеличивать / уменьшать и поворачивать его. Не уверен, насколько это практично (он показывает весь граф объектов Haskell таким, какой он есть - note shared []), но есть множество настроек, с которыми можно поиграть, так что вы определенно можете заставить его выглядеть лучше. Анимация, кажется, также поддерживается.

2 голосов
/ 14 марта 2011

Если вы идете по маршруту 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 ()

Я просто потратил некоторое время, играя с этим - это весело, но не пытайтесь увеличить значение 15, скажем, до 40, или ubigraph очень расстраивается (постоянное движение вершин)!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...