2012-03-21 2 views
0

У меня есть неориентированный граф на матрице по отношениям смежности вершин;Графический алгоритм рисования

/* a b c d 
    * a -1 0 1 1 
    * b 0 -1 1 1 
    * c 1 1 -1 1 
    * d 1 1 1 -1 
    * 
    */ 

    int G[4][4] = {{-1, 0, 1, 1}, 
        { 0,-1, 1, 1}, 
        { 1, 1,-1, 1}, 
        { 1, 1, 1,-1}}; 

Я хочу нарисовать этот график на сердечной системе. Каков алгоритм, который дает каждую позицию вершины (x, y) любым способом (с силовым приводом, с пружиной vs)? Я просто спрашиваю псевдокод, а не какую-либо библиотеку или программное обеспечение для рисования. Спасибо.

+0

Есть ли другие требования? Как насчет того, чтобы просто поставить их в круг? –

+0

@cato: Нет, спасибо. Я просто интересуюсь позициями. Я использую allegro5 для рисования круга или линии. – miqbal

+1

Я имею в виду, что позиции имеют точки вокруг круга. Например, если есть четыре вершины, у вас будет один верх, левый, нижний и правый. –

ответ

0

Вот круг граф макет изменен из prefuse библиотеки:

void layoutPoints(int rows, int cols, Point **coordinates, Rectangle maxSize) 
{ 
    int nn = rows * cols; 
    int width = maxSize.width; 
    int height = maxSize.height; 
    int centerX = maxSize.x + (width/2); 
    int centerX = maxSize.y + (width/2); 

    int radius = 0.45 * (height < width ? height : width); 

    for (int i = 0; i < width; i++) 
    { 
     for (int j = 0; j < width; j++) 
     { 
      double angle = (2 * M_PI * i)/nn; 
      double x = cos(angle) * radius + centerX; 
      double y = sin(angle) * radius + centerY; 
      coordinates[i][j].x = round(x); 
      coordinates[i][j].y = round(y); 
     } 
    } 
} 

Вы можете изменить это, чтобы использовать поплавки или двойник, если вам необходимо, а также.

+0

Можете ли вы объяснить, что такое строки, столбцы, координаты, maxSize? – miqbal

+0

@miqbal rows: количество строк на графике. cols: количество столбцов на графике. координаты: 2D массив точек, размер строк x cols, чтобы положить конечные координаты в. maxSize: максимальный размер границ графика (x, y, ширина, высота). –

+0

Спасибо, но это не работает для меня. – miqbal

Смежные вопросы