Question

Je dois tracer un cercle autour d'un sommet dans JUNG . Le cercle est défini par le sommet en tant que centre et un rayon r donné.

Était-ce utile?

La solution

Quelque chose comme ça, je suppose. Cela vous donnera des points pour le cercle avec radius donné. Pour régler la résolution de points changement x+=0.01 à une plus grande / valeur plus petite au besoin. Pour déplacer le centre du cercle à un point arbitraire (p,q), il suffit d'ajouter à (x,y), qui est plot(x+p,y+q);.

double radius = 3;
for (double x = -radius; x <= radius; x += 0.01) {
    double y = Math.sqrt(radius * radius - x * x);
    plot(x, y);//top half of the circle
    plot(x, -y);//bottom half of the circle
}

EDIT : Il semble que JUNG est pas vraiment XY intrigue, mais un cadre réseau / graphique. Donc, tout ce que vous avez besoin est de mise en page de vos points dans un cercle en utilisant l'une des mises en page fournies. semblent CircleLayout et KKLayout faire l'affaire, mais CircleLayout donne des résultats étranges pour quand il y a beaucoup de nœuds. Voici un exemple de code complet:

//Graph holder
Graph<Integer, String> graph = new SparseMultigraph<Integer, String>();

//Create graph with this many nodes and edges
int nodes = 30;
for (int i = 1; i <= nodes; i++) {
    graph.addVertex(i);
    //connect this vertext to vertex+1 to create an edge between them.
    //Last vertex is connected to the first one, hence the i%nodes
    graph.addEdge("Edge-" + i, i, (i % nodes) + 1);
}

//This will automatically layout nodes into a circle.
//You can also try CircleLayout class
Layout<Integer, String> layout = new KKLayout<Integer, String>(graph);
layout.setSize(new Dimension(300, 300)); 

//Thing that draws the graph onto JFrame
BasicVisualizationServer<Integer, String> vv = new BasicVisualizationServer<Integer, String>(layout);
vv.setPreferredSize(new Dimension(350, 350)); // Set graph dimensions

JFrame frame = new JFrame("Circle Graph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(vv);
frame.pack();
frame.setVisible(true);

J'ai choisi parce que ce SparseMultiGraph ce qui était dans JUNG tutoriel . Il existe d'autres types de graphiques, mais je ne suis pas sûr de ce que la différence est.

Vous pouvez également utiliser un StaticLayout qui peut prendre sommets (x,y), utilisez mon code d'origine pour tracer les points, mais ce ne serait pas aussi élégant pour cadre JUNG. Cela dépend de ce que vos besoins sont, cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top