2011-03-11 8 views
3

저는 하스켈의 나무에서 여러 검색 전략을 사용하고 있습니다. 나는 그것들을 시각화하고 또한 내가하고있는 검색을 움직이기 원한다. 내가 지금까지 발견 한 가장 좋은 점은 DOT 파일 (Lisp의 Land와 같은)을 작성하여 생성 할 수있는 이미지 인 graphviz이지만 이것이 최선의 접근 방식이라는 것을 의아하게 생각합니다. 내 나무가 꽤 커질 수있어서 프로그램에서 각 노드의 위치를 ​​입력하고 싶지는 않습니다.이 노드를 정확하게 자동으로 배치하기를 원합니다.트리 시각화 및 애니메이션

나는 또한 Gephi에서 약간 보였습니다. 그러나 데이터를 입력 할 수 있는지 확실하지 않습니다.

또한 내 트리 데이터 유형은 매우 기본입니다 : data Tree a = Leaf a | Branch (Tree a) (Tree a).

간단히 말해, 검색 시각에 트리 구조와 애니메이션을 가져올 수있는 방법을 찾고 있습니다. 나는 반드시 하스켈 중심 솔루션을 찾고 있지는 않지만 훌륭 할 수있다. 또한 gif와 같은 표준 형식으로 이미지/애니메이션을 출력 할 수 있다는 것이 큰 장점입니다.

+1

Graphviz가 레이아웃을 수행 할 수 있습니다. 네가 원하는 레이아웃이 아닌가? –

+0

Land of Lisp (http://landoflisp.com/graph-util.lisp)의 예제는 수동으로 노드 위치를 입력하는 대신 배치를 수행하는 데'dot '을 사용합니다. –

+0

@Jeremiah : 예. 저는 일종의 배치를 원합니다. 그러나 그것을 애니메이트 할 수있는 방법이 있습니까? – tmoisan

답변

3

내 의견을 확장 해 드리겠습니다 : Ubigraph의 가격 정책을 조사하지는 않았지만 사이트 ("기본"것)에서 무료 버전을 다운로드 할 수 있습니다. 그런 다음 vacuum-ubigraph 패키지를 설치할 수 있습니다 (GHC 7.0에서는 빌드 실패 HackageDB가있는 것으로 보이지만 문제없이 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 오브젝트 그래프는 마치 []과 공유합니다.), 놀고 싶은 설정이 많으므로 확실히 보일 수 있습니다. 애니메이션도 지원되는 것 같습니다.

2

당신은 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가 매우 화가납니다 (vertifies의 일정한 움직임)!