2013-04-09 4 views
1

강제 지시 그래프에서 노드/에지 간의 최소 거리를 지정할 수있는 방법이 있습니까?infoVis JIT 그래프의 노드 간 최소 거리 지정

하나의 노드가 수백 개의 다른 노드에 직접 연결되어 있고 이러한 경우 가장자리와 노드가 너무 가깝기 때문에 특정 가장자리 나 노드를 선택하기가 실제로 어렵다는 일부 그래프가 있습니다. onMouseEnter, onClick 등의 이벤트가 있습니다. 사용자가 기대하는대로 해고 당하지 않았습니다.

nodeA와 nodeB가 정말로 가깝다면, nodeA를 가리키고 강조 표시 될 것으로 예상되면 nodeB에 대해 이벤트가 발생하기 때문에 nodeB가 강조 표시됩니다. 가장자리가 너무 가깝게있는 경우도 마찬가지입니다. 기본적으로 사용자가 정확히 어느 노드/에지를 가리거나 선택했는지를 알기 란 혼란 스럽습니다.

가장자리 길이를 지정할 수 있음을 알고 있습니다. 이 문제는 어느 정도 해결할 수 있지만 노드와 가장자리가 수백 개있을 때 도움이되지 않습니다. 그리고 가장자리 길이를 캔버스의 높이보다 더 설정할 수 없습니다.

노드/에지 간의 최소 거리를 지정할 수 있다면 매우 유용 할 것입니다.

누구나 어떻게 할 수 있는지 알고 있습니까?

+0

그래프 정의 및 렌더링 방법을 보여주십시오. 그렇지 않으면 꽤 많이 추측됩니다. – kaiser

답변

1

InfoVis/TheJit API Documentation에는 모든 노드를 순환하여 데이터를 검색 할 수있는 .eachNode() 함수가 있습니다. 내가 년 이상에 대한 InfoVis/TheJit와 함께 일 현재 당신이 Graph.Node.getPos()으로 위치를 검색 할 수 있는지 모르겠어요, 어떤 프로젝트가 설정되지가없는 것처럼

$jit.Graph.Util.eachNode(graph, function(node) { 
    console.log(node); 
}); 
// or: 
graph.eachNode(function(node) { 
    console.log(node); 
}); 

. 어쨌든, 만약 당신이이 단계를 이해했다면, 당신은 그 위치를 유지할 객체/배열/행렬을 써야 할 것입니다. 어떤 엘이 다른 엘에 가려면, Graph.Node.setPos()을 사용하십시오.

+0

좋은 생각입니다. 나는 그것을 밖으로 시도 할 수 있습니다. 하지만이 일을 할 수 infovis API에서 뭔가를 찾고있었습니다. 나는 스스로 노드의 위치를 ​​정하는 것을 선호하지 않는다. –

+0

@PratikPatel 사실 ** API는 ** 제공합니다. 그리고 제가 기억한다면,'px' 값을 사용하기 때문에 너무 어렵지 않아야합니다. 모든 노드가 서로 노드 x/y 값을 고려해야하기 때문에 "쉬운 일이 아니다"라고 상상하는 유일한 사실은 그것 뒤에 모든 실제 수학입니다. 적어도'Graph.Node.getPos()'는 수학을 할 수있는 배열을 만드는 데 필요한 모든 도구를 제공합니다. – kaiser

+0

당신이 제안한 것이 유일한 선택 인 것 같습니다. –