1 개의 정점으로 시작하는 자바 프로그램을 만들었습니다. 거기에서 하나의 정점과 2 개의 정점을 사이클마다 추가합니다. 내가이 뜻 그것은 정적 레이아웃정점 위치 무작위 화 JUNG
Layout<Number, Number> staticLayout = new StaticLayout<Number, Number>(g, layout);
vv = new VisualizationViewer<Number, Number>(staticLayout, new Dimension(550, 550));
이 매우 해제 기술 소리 것입니다,하지만 그래프는 충분히 무작위 보이지 않는를 사용, 기본적으로는 실행됩니다 때마다 그들은 항상 보이는 것입니다 그래프의 가장자리를 중심으로 무리를 지어 배치하는 반면, 중심 근처에서는 거의 얻을 수 없습니다. 내 프로그램은 일반적으로 100 개의 생성 된 vertie를 사용하며 중심부에서 6 개, 다른 모든 가장자리에서 끝납니다.
다음은 방금 만든 무작위 예제입니다.
아마 누군가가 이것이 실제로 무작위인지 또는이 문제를 해결할 수있는 방법이 있는지 또는 내가 잘못 설정 한 것이 있는지를 확인할 수 있다면. 가능한 한 무작위로 노드를 갖고 싶습니다.
도움을 주시면 감사하겠습니다. 감사
public class AnimatingAddNodeDemo extends JApplet {
//create a graph
Graph<Number, Number> ig = Graphs.synchronizedUndirectedGraph(new UndirectedSparseMultigraph<Number, Number>());
ObservableGraph<Number, Number> og = new ObservableGraph<Number, Number>(ig);
og.addGraphEventListener(new GraphEventListener<Number, Number>() {
public void handleGraphEvent(GraphEvent<Number, Number> evt) {
//System.err.println("got " + evt);
}
});
this.g = og;
//create a graphdraw
layout = new FRLayout<Number, Number>(g);
layout.setSize(new Dimension(600, 600));
setSize(700, 700);
Relaxer relaxer = new VisRunner((IterativeContext) layout);
relaxer.stop();
relaxer.prerelax();
Layout<Number, Number> staticLayout = new StaticLayout<Number, Number>(g, layout);
vv = new VisualizationViewer<Number, Number>(staticLayout, new Dimension(550, 550));
JRootPane rp = this.getRootPane();
rp.putClientProperty("defeatSystemEventQueueCheck", Boolean.TRUE);
getContentPane().setLayout(new BorderLayout());
}
Integer v_prev = null;
public void process() {
vv.getRenderContext().getPickedVertexState().clear();
vv.getRenderContext().getPickedEdgeState().clear();
try {
if (g.getVertexCount() < 100) {
//add a vertex
Integer v1 = nodeCount;
g.addVertex(v1);
nodeCount++;
System.out.println("adding vertex " + v1);
vv.getRenderContext().getPickedVertexState().pick(v1, true);
j.setText(myText);
// wire it to some edges
if (v_prev != null) {
Integer edge = edgeCount;
//vv.getRenderContext().getPickedEdgeState().pick(edge, true);
// let's connect to a random vertex, too!
int rand = (int) (Math.random() * (edgeCount-1)); // because there is a 0 node
while (v1.equals(rand)) {
System.out.println("avoided connecting to myself");
rand = (int) (Math.random() * (edgeCount-1)); // because there is a 0 node
}
edgeCount++;
g.addEdge(edge, rand, v1); //add an edge called var1, between the nodes var2 and var3
vv.getRenderContext().getPickedEdgeState().pick(edge, true);
System.out.println("Adding edge " + edge + " between " + rand + " & " + v1 + "()");
}
v_prev = v1;
layout.initialize();
Relaxer relaxer = new VisRunner((IterativeContext) layout);
relaxer.stop();
relaxer.prerelax();
vv.getRenderContext().getMultiLayerTransformer().setToIdentity();
vv.repaint();
} else {
done = true;
}
} catch (Exception e) {
System.out.println(e);
}
}
public static void main(String[] args) {
AnimatingAddNodeDemo and = new AnimatingAddNodeDemo();
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(and);
and.init();
and.start();
frame.pack();
//frame.setVisible(true);
}
}
내가 어둠 속에서 총을 복용 해요,하지만 당신은 당신의'StaticLayout''FRLayout' (Fruchterman-Reingold)을 통과하는 것처럼 보인다. 스크린 샷은 크기가 너무 작 으면 대부분의'FRLayout'이 어떻게 보이는지입니다.노드는 레이아웃의 벽에 맞 닿아 있습니다. Jung은'StaticLayout' 클래스에서 변압기로'FRLayout'을 사용합니다. – sdasdadas