2012-03-21 35 views
0

私は、そのような頂点の隣接関係によって、matris上に無向グラフを持っています。グラフ描画アルゴリズム

/* 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}}; 

このグラフをcordinateシステムに描画します。任意の方法(力の向き、ばねの対)によって各頂点の位置(x、y)を与えるアルゴリズムは何ですか?私は擬似コードを要求するだけで、ライブラリやソフトウェアは描画しません。おかげさまで ここで

+0

その他の要件はありますか?サークルに入れるだけでどうですか? –

+0

@cato:いいえ、ありがとう。私はポジションについて面白いです。私は円または線を描画するためにallegro5を使用しています。 – miqbal

+1

私は、位置が円の周りの点であることを意味します。たとえば、4つの頂点がある場合は、頂点、左、下、右に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:グラフの列数。座標:点の2次元配列、行のサイズx cols、終了座標を入れるmaxSize:グラフの境界の最大サイズ(x、y、幅、高さ)。 –

+0

ありがとうございますが、私のために働いていません。 – miqbal