tour.datを読み込んで表示する描画画面に書く関数ですが、、、
(User関数のみですので他のXMARGIN等の文字は汲み取ってください。)
void draw(char *outfile,int x[MAX_N],int y[MAX_N],int n){
int i;
gdImagePtr im;
FILE *fp,*fpr;
int white,black,red,yellow;
char number[5];
char number2[7];
int tour[MAX_N];
int px,py,qx,qy;
int city_a,city_b;
if ((fp=fopen(outfile,"wb")) == NULL) {
fprintf(stderr,"Error: File %s open failed.\n",outfile);
exit(0);
}
im = gdImageCreate (700, 700); /* 700x700 のイメージを作成する */
/* 変数 yellow に黄色を割り当てる. 黄色が背景色になる */
yellow = gdImageColorAllocate (im,255,255,0);
/* 変数 black に黒色を, 変数 red に赤色を割り当てる */
black = gdImageColorAllocate(im, 0, 0, 0);
red = gdImageColorAllocate(im, 255, 0, 0);
// 描画画面に点 i を半径7pxの黒丸でプロットし, さらに, 番号iを黒字で添える.
for(i=1;i<=n;i++) {
gdImageArc(im, x+XMARGIN,y+YMARGIN, 7, 7, 0, 360, black);
sprintf(number,"%2d",i);
gdImageString(im, gdFontSmall, x+XMARGIN,y+YMARGIN+5,number,black);
}
// 巡回路データ tour.dat を開く
if( (fpr=fopen(TOUR_DATA,"rt")) == NULL ){
fprintf(stderr,"File(tour.dat) open error");
exit(1);
}
// 巡回路の読み込み
for(i=1; i<=n; i++) fscanf(fpr,"%d",&tour);
fclose(fpr);
for(i=1; tour[i+1] != 0 && i<n;i++) {
city_a=tour; city_b=tour[i+1];
px= x[city_a]+XMARGIN; py= y[city_a]+YMARGIN;
qx= x[city_b]+XMARGIN; qy= y[city_b]+YMARGIN;
gdImageLine(im, px,py, qx,qy, black);
} // 訪問順に従い、描画画面に都市aから都市bへの枝を黒で描く
if( i == n ){ // 経路が巡回路であれば
city_a=tour[n]; city_b=tour[1];
px= x[city_a]+XMARGIN; py= y[city_a]+YMARGIN;
qx= x[city_b]+XMARGIN; qy= y[city_b]+YMARGIN;
gdImageLine(im, px,py, qx,qy, black);
// n番目の訪問都市まで枝を描いたらならばn番目から1番目の訪問都市へ枝を描く
}
// 描画画面に巡回路の総距離を印字する
sprintf(number2,"%5.1lf",tour_length(x,y,n,tour)); // 巡回路tourの総距離
gdImageString(im, gdFontSmall, 500, 0,"total_length = ",black);
gdImageString(im, gdFontSmall, 600, 0,number2,black);
/* 標準出力にイメージを png フォーマットで出力する */
gdImagePng(im,fp);
fclose(fp);
/* 作成したイメージを破棄する */
gdImageDestroy(im);
}
他のプログラムからなんですが、この関数を含むプログラムを2回呼び出し、
前の点の配置と変更後の点の配置に応じて2つの画像ができあがります。
ここで、上記の内容を更に、変更した点から点への「枝」だけをを"赤色"に変更
しようと以下の部分に変えたのですが、
// 巡回路データ tour_a.dat を開く
if( (fpr=fopen(TOUR_DATA_A,"rt")) == NULL ){
fprintf(stderr,"File(tour.dat) open error");
exit(1);
}
// 巡回路の読み込み
for(j=1; j<=n; j++) fscanf(fpr,"%d",&tour[j]);
fclose(fpr);
for(i=1; tour[i+1] != 0 && i<n;i++) {
for(j=1; tour[j+1] !=0 && j<n;j++) {
city_a=tour; city_b=tour[i+1];
px= x[city_a]+XMARGIN; py= y[city_a]+YMARGIN;
qx= x[city_b]+XMARGIN; qy= y[city_b]+YMARGIN;
if(tour == tour[j] && tour[i+1] == tour[j+1])
{gdImageLine(im, px,py, qx,qy, black);}
else{gdImageLine(im, px,py, qx,qy, red);}
}
}
if( ....
このプログラムに変更すると
点の配置を変更した後の点が変更されていない状態で、
赤の枝もうまく変更した点だけの場所になっていません。
どこがおかしいのでしょうか?
巡回路プログラムの描画
ページ移動
- 掲示板
- ↳ C言語何でも質問掲示板
- ↳ 四聖龍神録2 掲示板
- ↳ 四聖龍神録Plus掲示板
- ↳ AerobeatPlus掲示板
- 副次コンテンツ
- ↳ 作品お披露目掲示板
- 登録ユーザー用コンテンツ
- ↳ 登録ユーザー掲示板
- コミュニティフォーラム
- ↳ みんなでソースコードをレビューしよう
- ↳ 3DCGソフト使用者のコミュ
- ↳ Win32 API
- ↳ 組み込み系スクリプト言語をつかってみよう
- ↳ 東方好きあつまれ
- ↳ C言語誰でも交流サイト - mixC++ -
- ↳ ビット論理演算が好きな人♪
- ↳ 企画関係について語ろうか
- ↳ エフェクトアニメーション
- ↳ 学生で集まってみる?
- ↳ DirectX SDK
- ↳ マイコン/FPGA電子工作部
- ↳ PHPに可能性を無限大
- ↳ Code Golf を楽しもう!
- ↳ 作曲している人で話し合ってみませんか♪
- ↳ ソフト制作コミュ
- ↳ El Shaddai - エルシャダイ -
- ↳ PSPプログラミング
- ↳ CINEMA 4D
- ↳ お絵かきコミュニティ
- ↳ 素材作ってみたよ!
- ↳ OpenGL
- ↳ OpenCV
- ↳ RPGを作りたい!
- ↳ ポケモン好き集まれ
- ↳ ならば .NETをやらないか?
- ↳ 1から勉強してみないか?
- ↳ 赤髪超大好き♪
- ↳ ノースリーブ
- ↳ 伝説の戦士プリキュアを語ろう
- ↳ コンテストコミュニティー
- ↳ DXライブラリ何でも質問コミュニティ
- ↳ 四聖龍神録コミュニティ
- ↳ HTML/CSS/JavaScript
- ↳ 生放送コミュ
- ↳ サンプルを共有するコミュニティ
- ↳ おすすめマーカー
- ↳ minecraft
- ↳ Xtal Language
- ↳ マインクラフト
- ↳ 数学やらないか?
- ↳ 習ったことをプログラムで表してみよう!
- ↳ 小物アプリ作成や ら な い か
- ↳ AIの可能性は無限大
- ↳ 自作OS製作(GUI入門)[雑談]
- ↳ リレーコーディング
- ↳ Unix/Linux
- ↳ 競技プログラミングごっこやろうぜ
- ↳ 夏休みプログラミングイベント2012 in MixC++
- ↳ D言語を広めよう
- ↳ Scala布教の会
- ↳ 3Dゲーム作ろうぜ!モデリング~プログラミングまで
- ↳ 言語に興味を持ったら是非!!
- ↳ レイヴンズ・ネスト
- ↳ C言語とC++言語のコミュニティー!
- ↳ 放課後ふぁんたじあ
- ↳ マイ サンプルズ
- ↳ ガンヲタの館
- ↳ 歯科機器
- ↳ 歯科機器情報
- ↳ 52歳からはじめるC言語
- mixC++更新・仕様変更履歴