plplotのマニュアルはhttp://cosmos.js.yamanashi.ac.jp/man4local/plplot/にある.
#include "plConfig.h" #include "plplot.h" #include "plevent.h" #include <unistd.h> #include <math.h> #include <stdlib.h> #define AGENT_NUM 100 #define LINK_NUM 300 typedef struct agent_type { int attri; /* 協力的(C): 1 利己的(D): 0 */ int payoff; int linkto[AGENT_NUM]; int c_max; } AGENT; int main() { int i,n,m; AGENT a[AGENT_NUM]; /* 初期設定 */ for(i=0; i<AGENT_NUM; i++){ a[i].c_max=-1; /* リンク先は0から付番 0個の場合は c_max=-1 */ a[i].attri = (int) ( 0.5 + (double)random()/RAND_MAX); /* CかDの初期値 */ } /*ランダムにリンクを張る */ for(i=0; i<LINK_NUM; i++){ n = (double) random()/RAND_MAX * AGENT_NUM; /*リンク元の選定 */ m = n; while(m==n) m = (double) random()/RAND_MAX * AGENT_NUM; /* リンク先の選定 */ a[n].c_max++; a[n].linkto[a[n].c_max] = m; a[m].c_max++; a[m].linkto[a[m].c_max] = n; } /* 描画 */ drawGraph(a); exit(0); } /* PLPLOTを用いた描画関数 */ int drawGraph(AGENT a[]) { int i,j; double xmax, ymax; double x[AGENT_NUM][1], y[AGENT_NUM][1]; int col[2] = {1,9}; /* マークの色 */ xmax=5.0; ymax=5.0; plsdev("xwin"); plsetopt("geometry","600x600"); /* ウィンドウサイズの設定 */ plsetopt("bg","FFFFFF"); plinit(); plcol0(1); plenv(0,xmax,0,ymax,1,-2); /* 5,6引数は軸と枠を書くかどうか */ /* positions (coodinate) of agent */ for(i=0;i<AGENT_NUM; i++) { x[i][0] = (double) random()/RAND_MAX * xmax; y[i][0] = (double) random()/RAND_MAX * ymax; plcol0(col[a[i].attri]); plpoin(1,x[i],y[i],a[i].attri+16); } plcol0(5); for(i=0;i<AGENT_NUM; i++) { j=0; while(j < =a[i].c_max) { pljoin(x[i][0],y[i][0],x[a[i].linkto[j]][0],y[a[i].linkto[j]][0]); j++; } } plend(); return(0); }
Makefileというファイルを,Cプログラムソースと同じところにつくる.下記のようなものをつくれば,
make randomNetとするだけでコンパイルできる.
Makefileの例
CC = /usr/bin/gcc LIB_TAG = d PKG_CONFIG_ENV = PKG_CONFIG_PATH=/usr/lib/pkgconfig # 基本書式 # # ターゲット名: 依存コンポーネント(ソースファイル) # (tab) 命令 # # 2行目の先頭は空白ではなくタブであること randomNet: randomNet.c $(CC) $< -o randomNet `$(PKG_CONFIG_ENV) pkg-config --cflags --libs plplot$(LIB_TAG)`