プログラムからの多角形描画 


   配列変数を用いたプログラムからの多角形描画

   配列変数に多角形の頂点データを取り込み、それを描画してみよう。

   また、以下のリンクのようなデータを用意する。
  データは多角形の頂点数とX,Yの頂点データをタブ区切りしたものである。
      多角形データ
  このデータを必ず"polyn.txt"というファイル名でプログラムと同じフォルダに保存する。
  プログラムを"dawpolyp.c"で保存した場合("xwmy.c"もあることが前提)
    $ cc -lX11 drawpolyp.c [Enter]
  としてコンパイル後
  $ ./a.out     [Enter]
    を実行すると、別のWindowが開いて多角形が描画される。
  描画内容を確認したらもとの端末エミュレータのWindowで
  [Enter]キーを押して終了する。

  

   多角形描画プログラム
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
/*  drawpolyp.c  */
/* cc -lX11 drawpolyp.c */
 
#include <stdio.h>
 
#include "xwmy.c"
 
int main(void)
{
    int i,n;
    int i1,i2;
    double xmin,xmax,ymin,ymax;
    double xd,yd;
    double x[101],y[101];
    FILE *fp;
 
    fp = fopen("polyn.txt", "r");
    fscanf(fp,"%d",&n);
    for (i=0; i<n; i++)  {
        fscanf(fp,"%lf %lf",&x[i],&y[i]);
    }
    fclose(fp);
 
    xmin=x[0]; xmax=x[0];
    ymin=y[0]; ymax=y[0];
    for (i=1; i<n; i++)  {
        if (xmin>x[i]) { xmin=x[i]; }
        if (xmax<x[i]) { xmax=x[i]; }
        if (ymin>y[i]) { ymin=y[i]; }
        if (ymax<y[i]) { ymax=y[i]; }
    }
    xd=(xmax-xmin)*0.2;
    yd=(ymax-ymin)*0.2;
 
    printf("n=%d\n",n);
    printf("xmin=%f : xmax=%f\n",xmin,xmax);
    printf("ymin=%f : ymax=%f\n",ymin,ymax);
 
    XW_Open();
 
    DB_WindowNV(xmin-xd, ymin-yd, xmax+xd, ymax+yd);
 
    XW_SetColor(XW_Color_White);
 
    DB_DrawRect(DB_WX1, DB_WY1, DB_WX2, DB_WY2);
 
    XW_SetColor(XW_Color_Green);
 
    for (i=0; i<n; i++)  {
        i1=i;
        i2=i+1;
        if (i2>n-1) { i2=0; }
        DB_DrawLine(x[i1], y[i1], x[i2], y[i2]);
    }
 
    XW_Refresh();
 
    printf("Push key");
    getchar();
 
    XW_Close();
 
    return 0;
}
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
020:
021:
022:
023:
024:
025:
026:
027:
028:
029:
030:
031:
032:
033:
034:
035:
036:
037:
038:
039:
040:
041:
042:
043:
044:
045:
046:
047:
048:
049:
050:
051:
052:
053:
054:
055:
056:
057:
058:
059:
060:
061:
062:
063:
064:
コメント:ファイル名
コメント:コンパイル方法
-
いつも通り
-
同じフォルダにこのファイルが必要
-
いつも通り
-
-
-
-
-
配列変数x、yの定義
FILE * 型の変数
-
この名前のファイルを読み込みで開く
ファイルからnの入力
-
ファイルから配列変数への入力
-
ファイルを閉じる
-
x、yの最小・最大値を求める
-
-
-
-
-
-
-
xの範囲の20%
yの範囲の20%
-
頂点数nを表示する
xの最小・最大値の表示
yの最小・最大値の表示
-
グラフィックを使えるようにする。
-
ワールド座標系のウインドウ設定
-
線の色を 白 に設定
-
四角形描画(始点X、始点Y、終点X、終点Y)
-
線の色を 緑 に設定
-
多角形の輪郭線描画開始
 描くべき要素Noを求める1
 描くべき要素Noを求める2
 終点+1の例外処理(=始点)
  一辺の描画
多角形の輪郭線描画終了
-
画面を更新
-
キー入力を促す
入力待ち
-
グラフィックを終了
-
いつも通り
 


 戻る