• 検索結果がありません。

資料 プログラムソース    コmam.C

   message(450,52,630,70,LIGHTRED,8,BLACK, (左

ボタン→決定) );

   mainrnenu−100p:

       clearmmouse−buttonO;

       get.mollseLposition(&x,&y);

       1x=(int)x/58;

       rnouse−offO;

       rnessage(450,4,500,22,LIGHTCYAN,2,BLACK,b ottom7crm d[tx]);

       message(lx*58+6,4,lx*58+54,22,RED,4,WHIT E,bottom−crnmd[lx]);

       rnouse−on O ;        do{

       get−rnouse−position(&x,&y)l        if(mouse−left−buttonO==CLICK){

      rnouse..offOl

      message(lx*58+6,4,lx*58+54,22.YE LLOW,4,BLACK,bottorn−crnmd[lx]);

      rnouse−on O ;       switch(lx){

       case O: draw−menuOi break;

      case 1: cancel menu O; break;

       case 2: rneasure rnenu O ;break;

       case 3: transforrnO;

  break;

       case 4: fileLmenuO;

  break;

       case 5: step−doO;

break;

       case 6: endO; brea kl

      }       }

         /* if(rnouse−right−buttonO==CLICK){

      mouse−of f O ;

      message(lx*58+6,4,lx*58+54,2 2]YELLOW,4,BLACK,bottorn−cmmd[lx]);

      1x=6;

      message(450,4,500,22,LIGHTCY AN,2,BLACK,bottorn−crnmd[lx]); 

      flarne(450,28,630,46,LIGHTRED,

1);

      endO;

      }   */

       }while(lx==(int)x/58);

       mouse−off O ;

       message(450,4,500,22,LIGHTCYAN,2,BLACK,b ottorn−crnrnd[lx]);

       rnessage(lx*58+6,4,lx*58+54,22,YELLOW,4,B LACK,bottom−cmrnd[lx]);

       mouse−on O ;    goto ma inrnenu.loop;

/**********************************************/

.f*  終了      */

/**********************************************!

void endO

    int i;

   unsigned flg;

   void far *ground−data;

   piO;

   mouse offO;

   message(450,28,630,46,LIGHTRED,8,BLACK, 作図

中の図形は消減 );

   rnessage(450,52,630,70,LIGHTRED,8,BLACK, sよろ

しいですか? ):

   ground−data=getTwindow(4g,139,353,238);

   flarne(50,140,350,235,LIGHTRED,2);

   rnouse−window(50,140,350,235);

   mouse−finger−csr(275,215);

   setcolor(BLACK);

   outtextxy(60,150, 警告!!  作図中の図形は 消滅します );

   outtextxy(60,190, (左ボタンで「終了」、右ボタンでメ ニューに戻る〉 );

   flg=kakunin(270,210);

   mouse−off O ;

   put−window(4g,139,ground−data);

    if (flg) {       chousa O ;

       rirekt touroku(END);

       keika.fileO;

       rireki−writeOi       setactivepage( {AIN) ;       setviewport(O,O,399,639,1);

      window(1,1,80,25);

       cleardeviceOi        clrscrO;

      setvisualpage(MAIN);

       closegraphO;

       exit(1);

       }    else {

       clear.rnessageO;

      ma in−menu O ;        }

/**********************************************/

/*  タイトルの表示      */

!**********************************************1

void titleO

   int fl[]={140, 50,14e,230,144,225,144, 55,48 5, 55,490, 50,140, 50};

   int kurni,ban,bot;

   cleardeviceO;

   setcolor(WHITE);

   setfillstyle(SOLID−FILL,WHITE);

   bar3d(O,O,639,39g,O,O);

   setlinestyle(SOLID−LINE,O,NORM−WIDTH);

   setcolor(BLACK);

   setfillstyle(SOLID−PILL,DARKGRAY);

   bar(140, 50,490,230)l

   setfillstyle(SOLID−FILL,RED);

   bar(145, 55,485,225);

   setfillstyle(SOLID−FILL,RED+8);

   fillpoly(7,fl);

   setcolor(RED);

   正ine(140, 50,145, 55>;

   1ine(486,226,490,23e);

   setcolor(WHITE);

   settextstyle(O,O,1);

   outtextxy(150,60, 「平面図形の性質探求」

ソフトウェア );

   settextstyle(O,O,4);

   setcolor(BLACK);

   outtextxy(189.,90, 幾何ん坊 );

   outtextxy(187,88, 幾何ん坊 );

   setcolor(WHITE);

   outtextxy(185,86, 幾何ん坊 );

   outtextxy(183,84, 幾何ん坊 );.

   settextstyte(e,O,1);

   outtextxy(150,180, V e r.1.0 (履歴記.録 版1994/7/10) );

   outtextxy(150,200, 【開 発】京都府立桃山高

等学校 大西俊弘 〉;

   flame(100,250,540,340,LIGHTCYAN,3);

   message(120,260,540,280,LIGHTCYAN,8,BLACK,

      一  謝辞   一 );

資料 プログラムソース main. c

  message(120,285,540,305,LIGETCYAN,8,BLACK,

本プログラムは、澤田憲一氏が開発された『幾何学者』

fe j ;

  rnessage(120,315,540,335,LIGHTCYAN,8,BLACK,

のソースコードの一部を、許諾を得て使用しています。

tl j ;

kumi−input:

  kumi=suuti−input(500,50,&bot,4);

  ban =suuti.input(500,50,&bot,5);

  if (bot==R) goto kumiminput;

  user nurn=kurn i*100+ban;

ノ**********************************************/

/*  学習状況の調査(アンケート)     *ノ

/**********************************************f

void chousaO

  int n,bot;

  piO;

  mouse−off O ;

  clrscrO;

  setvisualpage(SUB)i   setactivepage(SUB)i

  setfillstyle(SOLID−FILL,LIGHTGRAY);

  bar3d(O,O,639,399,0,0);

  flarne(20,150,400,380,YELLOW.3);

  textcolor(BLACK);

  flarne(50,2e,500,40,LIGHTCYAN,3);

  message(50,20,500,40,LIGHTCYAN.8,BLACK, 今日 の学習に対する感想をきかせて下さい 【問1】 );

  gotoxy(5,12);cprintf( 図形の性質調べにどのよ うに取り組みましたか? );

  gotoxy(7,14);cprintf( 1.とても積極的に取り

組んだ );

  gotoxy(7,16);cprintf( 2.ごく普通に取り組ん

):

  gotoxy(7,18);cprintf( 3.あまり積極的には取

り組めなかった );

  henji[O]=suuti−input(410,150,&bot,6);

  clrscrO;

  message(50,20,500,40,LIGHTCYAN,8,BLACK, 今日 の学習に対する感想をきかせて下さい 【問2】 ):

  gotoxy(5,12);cprintf( 図形の性質を調べるのに 時間は十分でしたか? );

  gotoxy(7,14);cprintf〔 1,時間が余った );

  gotoxy(7,16);cprintf( 2.ちょうど時間内に終

ることができた );

  gotoxy(7,18);cprintf( 3.時間が不足した );

  henji[1]一suutiminput(410,150,&bot,6);

  clrscrO;

  message(50,20,5aO,4e,LIGHTCYAN,8,BLACK, 今日 の学習に対する感想をきかせて下さい 【間3】 );

  gotoxy(5,12);cprintf( 図形の性質を幾つ見つけ ることができましたか );

  gotoxy(7,14);cprintf( 1.3個以上 );

  gotoxy(7,16);cprintf( 2.1〜2個 );

  gotoxy(7,18);cprintf( 3.見つけることができ

なかった );

  henji[2コ=suuti_inPut(410,150,&bot,6);

  clrscrO;

  rnessage(50,20,500,40,LIGHTCYAN,8,BLACK, 今日 の学習に対する感想をきかせて下さい 【問4】 );

  gotoxy(5,12);cprintf( 今日の学習は、興味深か

ったですか? );

  gotoxy(7,14);cprintf( 1 . 1−tV );

  gotoxy(7,16);cprintf( 2,どちらでもない );

  gotoxy(7,18);cprintf( 3.いいえ );

  henji[3]=suuti.input(410,150,&bot,6);

170 一

資料 プログラムソース

tool.c

#include <stdarg。h>

#include <stdio.h>

#include <conio.h>

#include 〈alloc.h>

#include 〈math.h>

#include <graphics.h>

#include <dos.h>

#include <pc98.h>

#include 〈string.h>

#include  geo.h

struct clockinfo timf;

#define BCDtot(x) ((xf16)*10+(x%16))

#define BUFSIZE 40 extern double px[52],py[52];

extern extern extern extern extern

lnt job−nuva;

int job[50];

int cp−num;

int ip.nurn;

int pmnurn[100];

extern char p−label[100]

extern int rnenu inf[][2]

extern char *job−cmmd[48];

extern char *msg[34];

extern char *point−labe1[52];

extern struct ver hen[100];

extern struct ang kaku[100コ;

extern int h nurn;

extern int k nurn;

extern int rec.num;

extern struct rireki rec[500];

extern struct time j ikan;

extern struct date hiduke;

f*********************************************/

/*  警告音を出す      */

/*********************************************/

void noiseO

   sound(3000);nosoundO;

/********************************************/

/*  シフトキーの押下状態を検出      */

/********************************************!

unsigned shiftfikey−scanO

   unsigned sft;

   sft=pc98key(2);

   return sft;

f********************************************/

/*  CAPSキーの押下状態を検出    */

/********************************************/

uns igned caps−keyhscanO

   unsigned caps;

   caps=pc98key(2);

   return caps;

/********************************************/

/*  文字列の入力窓      */

/********************************************/

void getstr(double x,double y,int text_cしchar*

str)

int ccount=O,xl,x2;

int cl=(getpixel(x,y));

mousepff O l setcolor(text−cl);

setfillstyle(SOLID−FILL,cl);

moveto(x,y);

do{

   str[ccount]=getchO;

   switch(str[ccountコ){

       case BS:

      ccount一一;

      raoverel(一8,0);

      x2=getxO+7i       xl=getxO ;       bar(xl,y,x2,y+15)l       break;

       case CR:

      str[ccount]= ¥O ;       break;

       default:

      str[++ccount]= ¥O ;       outtextC&str[ccount−1]);

      str[ccount]= a i       break;

   }

}while(str[ccountl!= ¥O );

/********************************************f

/* 確認ボタンの認識      */

/********************************************f

unsigned kakunin(double xl,double yl)

   double x2=xl+62,y2=yl+18;

   unsigned resulti    piO;

   mouse−window(xl,yl,x2,y2);

   rnouse.finger−csr(xl+26,yl);

   rnouseeoffO i

   flame(xl,yl,x2,y2,WHITE,1);

   rnessage(x1+1,y1+1,x2−1,y2−1,WHITE,8,BLACK,

確 認 );

   mouse−on O ;    result=O;

   do{

      if(mouse−right−buttonO==CLICK) resu lt=1;

      if(mouse−left−buttonO==CLICK) resu

lt=2;

       }while(result==O);

   mouse−off O ;

   rnessage(xl+1,yl+1,x2−1,y2−1,BLACK,8,WHITE,

確 認 );

   rnoll$e on O ;    return(result−1);

*********************************************f

/*  マウスカーソルの座標を表示する    */

!*         x,y:カーソルの座標 */

f*********************************************/

void Position(double x,doub正e y)

  textcolor(BLACK)i  gotoxy(5g,7);

  cprintf( X=%3d Y=%3d ,(int)x−4,368一((int)y+O FFSET−Y));

f*********************************************/

/* 新しくできた点の座標を登録し,記号を画面上

一 171 一

       に表示する   *

/*********************************************f

void save−cp(double x.double y)

    setcolor(RED);

    px[cp.num]=x;py[cp−num]=y;

    setviewport(7,30,435,392,1);

    outtextxy(x+DX,y+DY,point−label[cp=num]);

    setviewport(O,O,639,399,1);

    cp..num++1

/*********************************************/

./* 指示した点が何番目の点であるかと,

       その記号を登録     *

/.

./*********************************************/

void save−iP(int p)

    P_num[ip_num]冨P;

    P_label[iP_nurn]=*Point_1abel[P];

    サ       ロ

    lp_nu皿++,

/***************************************・******/

/*クリックした座標の近傍±5の既存の点の検索*/

/*********************************************/

int p−check(double x,double y)

    ine n,p,r;

    if(shtftmkey−scanO==1) r=O;

       else r=5;

    for(n;0;n<cp_num;n++){

        if((x>=px[n]一r &&x<=px[n]+r) && (y>;py

[n]一r && y〈=py[n]+r)〉{

       p=n;goto exit;

       }        }     p=一t;

    exit:

    retllrn(p) ;

/**********************************************/

ノ*  角度の計算      */

/**********************************************/

double angle(double xl,double yl,double x2,doubl e y2,double x3,double y3)

    double a,b,c,cos−b,theta;

    c=sqrt((xl−x2)*(x!−x2)+(yl−y2)*(yl−y2));

    a=sqrt((x3−x2)*(x3−x2)+(y3−y2)*(y3−y2));

    b=sqrt((x3−xl)*(x3−xl)+(y3−yl)*(y3−yl));

    if(a*c==O){

       theta=O.O;

       goto exit;

       }     else{

       cos−b;(a*a+c*c−b*b)/(2*a*c);

       theta=acos(cos−b)*180/3.141592653589 79324;

       } exit:

    return(theta);

!**********************************************/

./*  距離の計算       */

f**********************************************/

172

資料 プログラムソース

tool.c

double distance(double xl,double yl,double x2,do uble y2)

    return(sqrt((xl−x2)*(xl−x2)+(yl−y2)*(yl−y2)))

/**********************************************!

/*  面積の計算       */

**********************************************/

doilble area(double xl,double yl,double x2,double  y2,double x3,double y3)

 double s,a,b,c;

    a;sqrt((xl−x2)*(xl−x2)+(yl−y2)*(yl−y2));

    b=sqrt((x2−x3)*(x2−x3)+(y2−y3)*(y2−y3));

    c=sqrt((xl−x3)*(xl−x3)+(yl−y3)*(yl−y3));

    s=a+b+c;

    return((sqrt(s*(s−2*a)*(s−2*b)*(s−2*c)))/4);

/*********************************************/

/*   格子点      *./.

/*********************************************/

void gridO

    in七i,j;

    for =14;i〈=438;i=i+10){

       for(j=38;j〈394;j=j+10){

       putpixe1G,j,RED);

       }        }

/**********************************************/

/* 点を小円で表示する      */

f**********************************************f

void pset(double x,double y,int cl)

    int present−color=getcolorO;

    setviewport(7,30,435,392,1);

    setcolor(cl);

    putpixel((int)x+DX,(int)y+DY,cl);

    circle((int)x+DX,(int)y+DY,2);

    setviewport(O,O,639,399,1);

    setcolor(present.color);

/**********************************************/

/* イメージデータの退避      */

./******継**************************************/

void far *get−window(int xl,int yl,int x2,int y2)

    unsigned size;

    void far *ground−data;

    size=irnagesize(x1,y1,x2,y2);

   ground−data=farmalloc(size);

    getimage(xl,yl,x2,y2,ground−data);

    return(groundTdata);

/**********************************************/

/*  イメージデータの解放(元の画面に戻す)*

f**********************************************/

void put−window(int xl,int yl,void far *ground−d ata)

    putimage(xl,yl,ground−data,COPY−PVT);

farfree (g round−data) ;

/**********************************************/

/* メニューの中心部分      *1

/**********************************************・!

int rnenu(int job−type , int xpos , int ypos)

    double x,y;

    int i,ly,ret;

    void far *ground.data;

    int menu−num=rnenu−inf[job−type] [O];

    int i tem−nurn=menu−inf[job−type][1];

    rnouseroff O ;

    ground.data;getHwindow(xpos−1,ypos−1,xpos+11 3,ypos+item−num*20+9);

    flarne(xpos,ypos,xpos+110,ypos+3+item−num*20,

YELLOW,2);

    mouse−window(xpos,ypos+5,xpos+120,ypos+3+ite

rn.nurn*20) ;

    mouse−finger=csr(xpos+50,ypes+23);

    setcolor(BLACK);

    for(i=O;i〈item−num;i++)

    ollttextxy(xpos+8,ypos+4+20*i,job一.cmmd[menu−n um+i]);

    mouse−onO ;     piO;

    do{

        get一.rnouse−position(&x,&y);

        (int)ly=(y−ypos−5)/20;

        rnouse−off O ;

        message(510,4,630,22,LIGHTCYAN.8,BLACK,j ob−crnrnd[menu−num+ 1y] ) l

        highlightbar(xpos,ypos+3+20*ly,xpos+110,

ypos+20*ly+23,RED,WHITE,job−cmmd[rnenu.num+ly]);

        mouse−on O ;         do{

       get−rnouse−position(&x,&y);

        }wh i le(ly==(((int)y−ypos−5)/20) && rnouse

−left.buttonO1=CLICK && rnouse−right−buttonO!=C LICK);

        rnouse−off O ;

        highlightbar(xpos,ypos+3+20*ty,xpos+110,

ypos+20*ly+23,YELLOW,BLACK,job cmmd[menu−nurn+ly])

        rnouse−on O ;

    }while(rnouse−left−buttonO!=CLICK && rnouse−r ight−butten O !=CLICK) ;

    if(rnouse−right−buttonO==CLICK){

       mouse offOi

       flame(510,4,630,22,LIGHTCYAN,1);

       put window(xpos−1,ypos−1,ground−data)

       rnouse on O l        ret・0了        }

    if(mouse−left−buttonOn=CLICK){

       rnouse−offO;

       message(510,4,630,22,LIGHTCYAN,8,BLA CK,job−cmrnd[rnenu−num+ly]);

       put−window(xpos−1,ypos−1,ground−data)

       mouse.on O i        ret=ly+1;

       }     return(ret);

/**********************************************/

/.*  メッセージ用の枠の表示        */.

f**********************************************./

173

資料 プログラムソース tool. c

void flarne(int xl, int yl, int x2, int y2, int c 1,int d)

    int c=getcolorO;

   setlinestyle(O,O,3);

   setcelor(BLACK);

    setfillstyle(SOLID.FILL,BLACK);

    bar3d(xl+d,yl+d,x2+d,y2+d,O,O)i     bar3d(xl,yl,x2,y2,0,0);

   setcolor(cl);

   setfillstyle(SOLID−FILL,cl);

    bar3d(xl+1,yl+1,x2−1,y2−1,0,0)l     setcolor(c);

    setlinestyle(O,O,1);

/**********************************************f

./*  メッセージの表示       *./.

f**********************************************!

void rnessage(int xl,int yl,int x2,int y2,int gTc 1,int d,int tLcl,char *msg)

    setlinestyle(SOLID−LINE,O,THICK−WIDTH);

    setcolor(g−cl);

    setfillstyle(SOLID−FILL,g−cl);

    bar3d(xl+1,yl+1,x2−1,y2−1,0,0);

    setcolor(t−cl);

    outtextxy(xl+d,yl+1,rnsg);

    setlinestyle(SOLID−LINE,O,NORN−WIDTH);

/**********************************************/

!.*  ハイライトバーの表示         *ノ

/**********************************************/

void high工ightbar(int x正,int yl,int x2,int y2,in t g−cl,int t−cl,char *rnsg)

    setcolor(g−cl);

    setfillstyle(SOLID−FILL,g−cl)l     bar3d(xl,yl−1,x2,y2−1,0,0);

    setcolor(t.c1);

    outtextxy(xl+8,y1+1,msg);

・/**********************************************/

/*  マークを付ける       *./.

/**********************************************/

void rnark(int x,int y,int c)

    int f1[8コ;

    int cl=getcolorO;

    fl[e]一x; fl[1]=y+1;

    f1[2]=x+10; f1[3]=y+7;

    fl [4] =x; fl [5]=y+ 13;

    fl[6]=x; fl[7]=y+1;

    setcolor(BLACK);

   setfillstyle(SOLID−FILL,c);

    fillpoly(4,fl);

    drawpoly(4,f1);

    1ine(x+10,y+8,x,y+14)i    setcolor(cl);

f**********************************************/

./*  グラフィック画面への書式付き出力   *./

f**********************************************/

int gprintfxy(int x, int y,char *fmt,...)

   va−list argptr;

    char str[BUFSIZE];

資料 プログラムソース

tool.c

int cnt;

va−start(argptr,frnt) ; cnt=vsprintf(str,fmt,argptr);

outtextxy(x,y,str);

vaTend(argptr);

ret rn(cfi t) ;

/・**********************************************/

/*    回転後の座標の計算         */

/**********************************************f

void rotation(double xl.double yl,double x2,doub le y2,doubte t,double *x3,double *y3)

   *x3=(x2−xl)*cosl(t)一(y2−yl)*sinl(t)+xl;

   *y3=(x2−xl)*sinl(t)+(y2−yl)*cosl(t)+yl;

/**********************************************/

/*   メッセージ枠をクリアする      */

/**********************************************/

void clear−rnessageO

   flame(510,4,630,22,LIGHTCYAN,1);

   flame(450,28,630,46,LIGHTRED,1);

   flarne(450,52,630,70,LIGHTRED,1);

   mouse−onO ;    clrscrO;

/**********************************************f

/* 三角形の形状情報を保存する      */

/**********************************************/

void triminfo(int tl,int t2,int t3,int opt)

int k,tl,th;

/*1本目の辺*/

if (opt==SANKAKU) {

       if (t1くt2) {t1=t1; th=t2;}

       else {tl=t2; th=tl;}

       hen[hmnum].pl=t1;

       hen[h−num].p2=th;

       hen[h−nurn].bai=1.0;

       hen[h−num].kanke i=h−nurn;

       h. nurn++i    }

/*2本目の辺*/

if (t2くt3) {t1一七2; th;t3;}

   else {tl=t3; th=t2;}

hen[h−num].pl=tl;

hen[hTnum].p2=th;

switch (opt) {        case SEISANKAKU:

n[kユ.kanket;

num;

default:

k=hen−search(t1,t2);

hen[h_numユ.kankei=he break;

hen[h−num].kankei=h一

   }

hen[h num].bai=1.0;

h nurn++;

/*3本目の辺*/

if 〔t1くt3) {tl=tl; th=t3;}

   else {tl=t3; th=tl;}

hen[h_num].pl=七1;

hen[hTnum].p2=th;

switch (opt) {        case SEISANKAKU二

      k=hen−search(tl,t2);

       hen[h−num].kankei=he 皿[k]曾kankei;

       break;

      case NITOUHEN:

       hen [h−nurn] . kanke i=h−

num−1;

       break;

      case CHOKKAKUNITOUHEN:

       hen [h.nurn] . kanke i=h−

num−1;

       break;

      default:

       hen [h−nurn] . kanke i=h−

num;

       }

   hen[hptnurn].bai=1.0;

   h num++;

   1*1つ目の角*/

    if (t1くt3) {t1=t1; th=t3;}

       else {tl=t3; th=tl;}

   kaku[k−num].pl=tll    kaku[kmnum].p2=t2;

   kaku[k−num].p3 th;

   switch (opt) {        case SEISANKAKU:

       kaku [k.nurn] . kankei=一 60;

       kaku [k−nurn] . deg=60 .0

       break;

       case CHOKKAKUNITOUHEN:

       kaku[k−num].kankei=一 45;

       kaku [kHnurn] . deg=45 .0

       break;

       default:

       kaku[k−num].kankei=k rnurni

       }    knum++;

   /*2つ目の角*/

    if (tlくt2) {t1;t1: th=t2;}

       else {tl;t2; th=tl;}

   kaku[k−nurn].p1;t 1;

   kaku[k−num].p2一一t3;

   kaku[k−num].p3=th;

   switch (opt) {        case SEISANKAKU:

       kaku [k−nurn] . kanke i=一 6e;

       kaku[k−num].deg=60.0

       break;

       case CHeKKAKU:

       kaku[k−num].kankei=n 90;

       kaku[k−nurn].deg=90.0

       break;

       case CHOKKAKUNITOUHEN:

       kaku[k−nurn].kankei=一 90;

       kaku [k.nurn] . deg=90 . e

       breakl        defau/t:

       kaku [k−num] ..kankei=k num;

       }    k num++;

    /*3つ目の角*/

    if (t2くt3) {tl=t2: th=t3;}

       else {tl=t3; th=t2;}

一 174 一

資料 プログラムソース

tool.c

60;

kaku[k−num].pl=t1;

kaku[k−num].p2=tl;

kaku[k−nurn].p3=th;

switch (opt) {        case SEISANKAKU:

nurn−2;

45;

一nurn;

       }    k. num++;

case NITOUHEN:

kaku [k−fium/ . kankei=一

kaku[k−nurn].deg=60.0

break;

kaku [k−nurn] . kankei =k

      break;

case CHOKKAKUNITOUHEN:

      kaku[k−nurn].kankei=一

default:

kaku[k−num].deg=45.0

break;

kaku [k−nurn] . kankei=k

/**********************************************f

/*  四角形の形状情報を保存する      */

/**********************************************f

void quadminfo(int tl,int t2,int t3,int t4,int o

pt)

    int t,tl,th,k;

   /*1本目の辺*/

    if (opt==SIKAKU) {

       if (t1くt2) {t1=t1; th=t2:}

      else {tl=t2; th=tl;}

       hen[hLnurn].pl=tl;

       hen[h−num].p2=th;

       hen[hunurn].bai=1.Oi        hen[hNnurn].kankei=h−num;

       h num++;

       }

   /*2本目の辺*/

    if (t2く七3) {tl=t2; th=t3;}

       else {tl=t3; th=t2;}

   hen[h−num].pl=tl;

   hen[h−num].p2=th;

   switch (opt) {        case SEIHOUKEI:

       k=hen−search(tl,t2);

       hen[hunurn].kanke i=he n[kユ.kankei;

       break;

       case HISIGATA:

       k=hen−search(tl,t2);

       hen[h_nu皿ユ.kanke i=he n[k].kankei;

       break;

       default:

       hen[h」】umユ.kanke i=h_

nurn;

       }

   hen[h−num].bai=1.0;

   h num++;

   /*3本目の辺*/

    if (t3くt4) {tl=t3; th=t4;}

       else {tl=t4; th=t3;}

   hen[h−nurn].pl=tl;

   hen[h−nurn].p2=th;

   switch (opt) {        case SEIHOUKEI:

       k=hen−search(t1,t2);

      hen[hmnum].kankei=he n[k].kankei;

       break;

      case HISIGATA:

       k=hen−search(tl,t2);

       hen [hrmnum] . kanke i=he n[k].kankeil

       break;

      case CliOUHOUKE!:

       k=hen−search(t1,t2);

       hen[h.num].kankei=he n[k].kankei;

       break;

      case HEIKOUSIHENKEI:

       k=hen−search(tl,t2);

       hen[h−num].kankei=he n[k].kankei;

       break;

      default:

       hen[h−num].kankei;h−

nurn;

       }

   hen[h.num].bai=1.0;

   h num++;

   /*4本目の辺*/

    if (tlくt4) {t1=t1; th=t4;}

       else {tl=t4; th=tll}

   hen[h.nurn].pl=tl;

   hen [hrr num] .p2=th ;    switch (opt) {       case SEIHOUKEI:

       k=hen−search(t1,t2)i        hen [h−nuni] . kanke i=he n[k].kankei;

       break;

      case HISIGATA二

       k=hen−search(tl,t2)i        hen[h−num].kankei=he n[k].kankei;

       break;

      case CHOUHOUKEI:

       k=hen−searchCt2,t3)i        hen[h_numコ.kankei=he n[k].kankei;

       break;

      case HEIKOUSIHENKEI:

       k=hen.search(t2,t3);

       hen[h_numコ.kankei=he n[k].kankei;

       break;

      default:

       hen[h_nu皿コ.kankei=h_

num;

       }

   hen[hJnum].bai=1.0;

   h nurn++;

   /*1つ目の角*/

    if (t1くt3) {tL=t1; th=t3;}

       else {tl=t3; th=tl;}

   kaku[k−num].p1=tli    kaku [k−nurn] . p2=t2 ;    kaku[k−num].p3=th;

   switch (opt) {       case SEIHOUKEI:

       kaku[k−nurn] .kankei=一

901

       kaku [k.nurn] . deg=90 .0

       break;

      case CHOUHOUKEI:

       kaku[k−nurn].kankei=一 90;

       kaku[k−num].deg=90.0

一 175 一

資料 プログラムソース tool. c

       break;

      default:

       kaku [kmnurn] . kankei=k

.num;

       }    k num++;

   /*2つ目の角*/

    if (t2くt4) {七1=t2; th=t4;}

       else {tl=t4; th=t2;}

   kaku[k−num].pl=tl;

   kaku[k−num].p2=t3;

   kaku[knurn].p3=th;

   switch (opt) {        case SEIHOUKEI:

       kaku[k−num].kankei=一 ge;

       kaku[k−nurnコ.deg=90.0

       break;

       case CHOUHOUKE I:

       kaku[k−num].kankei=一 90;

       kaku[kunurn].deg=90.0

       break;

       default:

       kaku[kTnurn] . kankei=k

−nurai        }    k num++;

   /*3つ目の角*/

    if (t1くt3) {tl=tl; th=t3;}

       else {tl=t31 th=tll}

   kaku[k_numコ.pl=tl;

   kaku[k−nura] . p2=t4;

   kaku[k.nurn].p3=th;

   switch (opt) {        case SEIHOUKEI:

       kaku [k−nurn] . kankei=一 go;

       kaku[k−num].deg=90.0

       breaki        case CHOUHOUKEI:

       kaku[k−nurn].kankei=一 go;

       kaku[k−nurn].deg=90.0

       break;

       case HISIGATA:

       kaku[k.num].kankei=k num−2;

       break;

       case HEIKOUStHENKEI:

       kaku[kunum].kankei=k num−2;

       break;

       default:

       kaku[k−num].kankei=k

−numi        }    k nurn++;

901

/*4っ目の角*/

if (t2〈t4) {tl=t2;

   else {tt=t4;

kaku[k−num].p1=t1;

kaku[k−num].p2=tl;

kaku[k−num].p3=th;

switch (opt) {

th=t4;}

th=t2;}

case SEIHOUKEI:

kaku[k_numユ.kankei=一

kakuこk_numユ.deg=90.0

90;

nurn−2;

num−2;

u.num;

       }    k num++;

case CHOUHOUKEI:

case HISIGATA:

break;

kaku[k. num].kankei=一

kaku[k−nllm].deg一一gO.O

break;

kaku[k.nurn].kankei=k

      break;

case HEIKOUSIHENKEI:

      kaku[k_numユ.kankei=k

default:

break;

kaku [k−nurn] . kankei=k

!・**********************************************/

/*  2つの点の番号から辺の番号を取り出す  */

/**********************************************/

int henLsearch(int tl,int t2)

   int i,t;

   int ret=一1;

   if (tl>t2) {t=tli tl=t2; t2=t;}

   for (i;0;iく=h nurn:i十十) {

       if ((hen[iコ.pl==tl)&&(hen[iコ.p2=;t2))

 {

       ret=i;

       break;

      }        }

   return (ret);

/**********************************************/

/* 3つの点の番号から角の値を取り出す   */

/**********************************************/

double kaku−search(int tl,int t2,int t3)

   int i,t;

   double rp=O.O;

   if (tl>t3) {t=tl; tl=t3; t3−t;}

   for (i=0:iく=k num:i++) {

       if ((kaku[i].pl==tl)&&(kaku[i].p2==t 2)&&(kaku[i].p3==t3)) {

       rp=kaku[i].deg;

       break;

      }        }    return (rp);

!**********************************************/

/* 座標を与えて最も近い点の番号を取り出す */

1**********************************************/

int point−search(double xl,double yl)

   int ii     int rp=一1;

   for (i=O;iくcp_num;i++) {

       if ((fabs(px[i]一x1)く2) && (fabs(py[i]一 y1)く2)) {

       rp=i;

       break;

r 176 一

資料 プログラムソース too 1. c

   } return (rp);

f**********************************************/

/* 整数値の入力      */

/・**********************************************/

int suuti−input(int xpes,int ypes,int *bot,int o

pt)

    int i,j,cしsuuti,n=0:

   dQuble x,y;

   char kyi ¥O  , a[10];

   char flg=   ;    void far *groundptdata;

   *bot=L;

   mouse offOl    cl=getcolorO;

   mou$e−window(xpos,ypos+60,xpos+130,ypos+135)

   ground−data=get−wi ndow(xpos−1,ypos−1,xpos+13 3,ypos+138);

   flame(xpos,ypos,xpos+13e,ypos+135,LIGHTGREEN,

2)i

    flame(xpos+5,ypos+35,xpos+35,ypos+55,BLACK,O)

   setcolor(BLACK);

   for(i;1;iく=5;i++){

       for(j;1;jく=2;j++){

      setfillstyle(SOLIDrmFILL,BLAC K);

      bar3d(xpos+(i−1)*25+6,ypos+

(j−1)*25+61,xpos+(i−1)*25+26,ypos+(j−1)*25+81,0,

o);

      setfillstyle(SOLIDTFILL,WHIT

E);

      bar3d(xpos+(i−1)*25+5,ypos+

(j−1)*25+60,xpos+(i−1)*25+25,ypos+Cj−1)*25+80,0,

o);

      }        }

   setfillstyle(SOLI]一FILL,BLACK);

   bar3d(xpes+6 ,ypos+111,xpos+51 ,ypos+131,0,0)

   bar3d(xpos+56,ypos+111,xpos+126,ypos+131,0,0)

   setfillstyle(SOLID−FILL,YELLOW);

   bar3d(xpos+5 ,ypos+110,xpos+50 ,ypos+130,0,0)

   bar3d(xpos+55,ypostllO,xpos+125,yp6s+130,0,0)

   setcolor(BLACK);

   outtextxy(xpos+ 7 ,ypos+62,  1  );

   out textxy(xpOs+32 ,ypos+62, 2 );

   outtextxy(xpos+57 ,ypos+62, 3 );

   ottttextxy(xpos+82 ,ypos+62, 4 );

   outtextxy (xpos+107,ypos+62,  5  );

   outtextxy(xpos+ 7 ,ypos+87, 6 );

   outtextxy(xpos+32 ,ypos+87, 7 );

   outtextxy(xpos+57 ,ypos+87, 8 );

   outtextxy(xpos+82 ,ypos+87, 9 );

   out textxy (xpos+107 ,ypos+87,  O  ) ;    outtextxy(xpos+7,ypos+112, 訂正 );

   outtextxy(xpos+57,ypos+112, 入力終了 );

   switch (opt){

       case 1:

       outtextxy(xpos+5,ypos+10, 何等分し

ますか );

       outtextxy(xpos+36,ypos+37, 等分 (n

)2) );

       break;

       case 2:

       ou七textxy(xpos+5,ypos+10, 何番目の

点ですか );

       outtextxy(xpos+36,ypos+37, 番目 (m

=〉. 1)  );

      break;

       case 3:

       outtextxy〔xpos+5,ypos+10, 何角形で すか? );

      outtextxy(xpos+36,ypos+37, 角形(5〜

18)  ) ;

      break;

       case 4:

       outtextxy(xpos+5.ypos+10, 何組です か? );

      outtextxy(xpos+36,ypos+37, 組(1〜

20) )l       break;

       case 5:

       outtextxy(xpos+5,ypos+10, 何番です か? );

      outtextxy(xpos+36,ypos+37, 番(1〜

50)  ) ;

      break;

       case 6:

       outtextxy(xpos+5,ypos+10, 何番です か? );

      outtextxy(xpos+36,ypos+37,t  番  (1〜

3) ) ;.

      break;

       }    rnouse−on O ;

   mouse−fingerTcsr(xpos+55,ypos+80);

   setcolor(WHITE)i input:

do{

       piO;

       do{

      get−mouse−position(&x,&y)l       if(rnouse−rightmbuttonO==CLICK)

       *bot=R;

       goto exit;

      }

       }white (mouse left−buttonO!=CLICK);

       if      ((y>ypos+60 && y<ypoS+80) && (x

>xpos+5  &&x<xpos+25 ))  {ky= 1 ;}

         else if((y>ypos+60 && y〈ypos+80) && (x

>xpos+3G&&x<xpos+50 ))  {ky=,2,;}

         else i f((y>ypos+60 && y<ypos+80) && (x

>xpos+55 && x<xPos+75 ))  {ky= 3 ;}

         else if((y>ypos+60 && y〈ypos+80) && (x

>xpGs+80 && x<xpos+100))  {ky= 4 ;}

         else if((y>ypos+60 && y<ypOs+80) && (x

>xpos+105.&& xくxpos+125)) {ky= 5 ;}

         else if((y>ypos+85 && y<ypos+正05) &&

(x>xpos+5  && x〈xpos+25))  {ky;,6,;}

         e且se if((y>ypos+85 && y<ypos+105) &&

(x>xpos+30 && x<xpos+50))  {ky= 7 ;}

         else if((y>ypos+85 && y<ypos+105) &&

(x>xpQs+55 && x<xpos+75))  {ky; 8 ;}

         else if((y>ypos+85 &&y<ypos+105) &&

(x>xpos+80 && x<xpos+100)) {ky= 9 ;}

         else if((y>ypos+85 && y〈ypos+105) &&

(x>xpos+le5 && x〈xpos+125)) {ky± O ;}

        else if((y>ypos+110 && y〈ypos+130) &&

(x>xpos+5 && x〈xpos+50 )) {flg= a ;ky= ¥O ;}

        else if((y>ypos+110 && y<ypos+130) &&

(x>xpos+55 && xくxpos+125)) {flg; r ;ky= ¥O ;}

        else {        noiseO;

       goto inputi