Вопрос
Мне нужно нарисовать круг вокруг вершины в Юнг. Анкет Круг определяется вершиной как центр и заданный радиус r.
Решение
Я думаю, что -то вроде этого. Это даст вам очки за круг с данными radius
. Анкет Чтобы настроить разрешение изменений точек x+=0.01
к большему/меньшему значению по мере необходимости. Перемещать центр круга в произвольную точку (p,q)
, просто добавьте это в (x,y)
, то есть 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
}
РЕДАКТИРОВАТЬ: Похоже, что Юнг на самом деле не тарифт XY, а структура сети/графика. Таким образом, все, что вам нужно, - это расположить ваши точки по кругу, используя один из предоставленных макетов. CircleLayout
а также KKLayout
Кажется, что делает свое дело, хотя CircleLayout
дает странные результаты, когда есть много узлов. Вот полный пример кода:
//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);
Я выбрал SparseMultiGraph
Потому что это то, что было в Учебник Юнга. Анкет Есть и другие типы графиков, но я не уверен, в чем разница.
Вы также можете использовать StaticLayout
это может занять (x,y)
Вершины, затем используйте мой исходный код, чтобы построить точки, но это не было бы таким элегантным для Jung Framework. Зависит от того, каковы ваши требования, однако.