資料 プログラムソース sankaku. c
setwritemode(O);
clrscrOl
goto exit;
}
}while((x==01dx) &&
use teft buttonO!一一CLICK);
一 if(y1−y2){
x3=cx;
y3=y;
} else{
k=
x3=x;
y3−k if
(y==oldy) && mo
一 (x2−xl) ! (y2−yl) ;
*(x−cx)+cy;
(y3〈=30) { y3=30;
x3=(y3−cy)/k+cx;
}
tf cy3>=392) { y3=392;
x3=(y3−cy)/k+cx;
} }
set−mouseuposition(x3,y3);
position(x3,y3);
line(xl+DX,yl+DY,oldx+DX,oldy+DY);
line(x2+DX,y2+DY,oldx+DX,oldy+DY);
line(xl+DX,yl+DY,x3+DX,y3+DY);
line(x2+DX,y2+DY,x3+BX,y3+DY);
gotoxy(62,10); cprintf( %5.lf , distance
(xl,y1,x3,y3));
gotoxy(62,11); cprintf( %5.lf , distance
(x2,y2,x3,y3))l
gotoxy(65,13); cprintf( %5.lf ,angle(xl,
yl,x2,y2,x3.y3));
gotoxy(65,14); cprintf( %5.1f ,angle(x2,
y2,x3,y3,xl,yl));
go七〇xy(65,15); cprintf( %5.If ,angle(x3,
y3,xl,yl,x2,y2));
oldx=(double)(int)x3;oldy=(double)(int)y
3;
! *otdx=(do ble)(int)x3;Qldy=(deuble)(tnt)
y3i*/
}while(rnouse.IeftLbuttonO!=CLICK)i rnouse−offOl
setwr i ternode (O) ;
setcolor(BLACK);
line(xl+DX,yl+DY,x3+DX,y3+DY);
line(x2+DX,y2+DY,x3+DX,y3+DY);
line(xl+DX,yl+DY,x2+DX,y2+DY);
pset(x3,y3,BLACK);
save=cp(x3,y3);
setviewport(O,e,639,399,1);
tri−info(pl,p2,cp−num−1,NITOUHEN);
job[job−nurn]=NITOUHEN;
rirekimtouroku(NITOUHEN)i
job−nurn++;
mouseTonO ; exit:
return(flag);
}
/**********************************************!
/* 直角三角形の作図 .*/
/**********************************************/
void chokkakusankakukeiO
{
double xl,yl,x2,y2;
int btn,pl,p2,p;
rnessage(450,28,630,46,LIGHTRED,8,BLACK,msg[2
2]);
rnouse−window(4,28,438,394);
mouse.cross−csr(200,150);
pl:/*1点目の取得*/
rnessage(450,52,630,70,LIGHTRED,8,BLACK,rnsg[6])
;
get−point(&xl,&yl,&btn,&pl);
if(btn==R)goto exit;
piO;
p2:/*2月目の取得*/
message(450,52,630,70,LIGHTREI〕,8,BLACK,msg[7])
;
9et_Point(&x2,&y2,&btn,&p2):
if(btn==R){
ロ コ
1P_num一一,
gotO P正:
} pio;
if (p1>p2) {pコp1; p1=p2; p2=p;}
btnニchokkakusan1{akukei disp(P.1,P2);
if(btn;三R){
コ の
1P_num一一,
clrscrO;
gotO P2;
}
exi七l
clearLmessageO;
tri一.rnenu.O ;
}
/*一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一*
/
/*. 直角三角形の表示 . *
/
/*一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一一*
/
int chokkakusankakukei_disp(int p1,int p2)
{
double x,y,xl,yl,x2,y2,x3,y3,01dx,oldy,da,db,
CX,cy,
char a,b,c;
int flag=L;
x1=px[pl]; y1;py[p1]; x2=px[p2]; y2;py[p2];.
o正dx=x2;oldy;y2;
if(x1>x2) { x=x1;y=yl;
xl;x2:y1=y2;
x2=x;y2=y;
a=P_label[iP_num−1];
b;p_正abel[ip_num−2];
} else{
a;P_label[ip_nu皿一2];
b=p−label[ip_num−1ユ;
};
c=*point_1abe正[cp_num];
cx=(x1+x2)/2; cy=(yl÷y2)/2;
message(450,28,630,46,LIGHTRED,8,BLACK,msg[2
3]);
rnessage(450,52,630,70,LIGHTRED,8,BLACK,rnsg[2])
;
setviewport(7,30,435,392,1):
gotoxy(59,9); cprintf( %c%c=%5、1f ,a,b,dista nce(x1,y1.x2,y2));
gotoxy(59,10);cprintfC,%c%c=,「Ja,c);
gotoxy(59,11);cprintf( %c%c= ,b,c):
90toxy(59,13);cprintf( ∠%c%c%c= ,a,b,c);
gotoxy(59,14);cprintfC ∠%c%c%c; ,a,c,b);
gotoxy(59,15);cprintf( ∠%c%c%c; ,b,a,c):
資料 プログラムソース sankaku. c
do{
mollse−on O ; do {
get−rnouse−position(&x,&y);
if(rnouse−right.buttonO==CLICK)
{ flag=R;
line(xl+DX,yl+DY,x2+DX,y 2+DY)i
line(xl+DX,yl+DY,x3+DX,y 3+DY)i
line(x2+DX,y2+DY,x3+DX,y 3+DY)i
setviewportCO,O,639,399,
1) ;
setwritemode(O);
clrscrO;
goto exit;
}
}while((x==oldx) && (y==oldy) && rnou se .left−button O !=CLICK );
da=distance(cx.cy,xl,yl);
db=distance(cx,cy,x,y);
x3=cx+(x−cx)*da/db;
y3=cy+(y−cy)*da/db;
gotoxy(62,le); cprintf( %5.lf ,distance
(xl,y1,x3,y3));
gotoxy(62,11); cprintf( %5.lf ,distance
(x2,y2,x3,y3));
gotoxy(65,13); cprintf( %5.1fり ,angle(x1,
yl,x2,y2,x3,y3));
gotoxy(65,14); cprintf( %5.lf ,angle(x2,
y2,x3,y3,xl,yl));
gotoxy(65,15); cprintf( %5.lf ,angle(x3,
y3,xl,y1,x2,y2))]
set−rnouse position((int)x3,(int)y3);
position(x3,y3);
setwritemode(1)l setcolor(GREEN);
line(xl+DX,yl+DY,oldx+DX,oldy+DY);
line(x2+DX,y2+DY,oldx+DX,oldy+DY);
line(xl+DX,yl+DY,x3+DX,y3+DY)1 1ine(x2+DX,y2+DY,x3+DX,y3+DY);
oldx=(double)(int)x3;oldy=(double)(int)y
3;
}while(mousemleft=buttonO!=CLICK);
setwr i ternode (O) ;
setcolor(BLACK);
line(xl+DX,yl+DY,x3+DX,y3+DY);
tine(x2+DX,y2+DY,x3+DX,y3+DY);
line(xl+DX,yl+DY,x2+DX,y2+DY);
pset(x3,y3,BLACK);
save−cp(x3,y3);
setviewport(O.O,639,399,1);
tri−info(pl,p2,cp−num−1,CHOKKAKU);
job[job−nurn]=CHOKKAKU;
rireki7touroku(CHOKKAKU);
job−num++;
mouse−onO ;
2])i
meuse−window(4,28,438,394);
rnouseLcrossmcsr(200, 150) ;
p1:./*1点目の取得*/
message(450,52,630,70,LIGHTRED,8,BLACK,msg[6])
;
get−point(&xl,&yl,&btn,&pl)l if(btn==R)goto exit;
ptO;
p2:/*2点目の取得*/
皿essage(450,52,630,70,LIGHTRED,8,BLACK,msg[7])
:
9et_point(&x2,&y2,&btn,&p2);
if(btn==R){
ら じ
lp_num一一・
gotO P1;
}
pio;
if (p1>p2) {p=p1: p1;p2; p2=p;}
btn;chokkakunitouhen_disp(Pl,P2);
if(btn==R){
ロ コ
1P_nu皿一一,
gotO P2;
}
exit:
clearmrnessageO;
tri menuO;
}
.!*一一一 一一一一」T一一一.一一一一t7r一一一一一一一一.一一一一一一一一一.一T一一一一*
/
/* 直角二等辺三角形の表示 *
/
f *一一一一uLT一一一一一一一 7m一一一一一一tmm一一一一一一一一tT 一一一JJ一一m*
/
int chokkakunitouhen−disp(int pl,int p2)
{
double x,y,xl,yl,x2,y2,x3,y3,01dx,oldy,oldx3,
01dy3,rn,ti int flag=L;
xl=px[pl]; yl=py[pl]; x2=px[p2]; y2=py[p2];
01dx=x2;01dy=y2;
oldx3=x2ioldy3=y21
if(xl>x2) {x=xl;y=yl;xl=x2;yl=y2;x2=x;y2=y;}
rnessage(450,28,630,46,LIGHTRED,8,BLACK,rnsg[2
3]);
rnessage(450,52,630,70,LIGHTRED,8,BLACK,msg[2])
;
setviewport(7,30,435,392,1);
gotoxy(59,9);cprintf( マウスが線分の );
gotoxy(59,10);cprintf( どちら側にある );
gotoxy(59,11);cprintf( かによって三角 );
gotoxy(59,12):cprintf( 形を描く位置が );
gotoxy(59,13);cprintf( が変わります );
do{
exit:
return(flag)i
}
/ **********************************************/
/* 直角二等辺三角形の作図 */
/**********************************************/
void chokkakunitouhenO
{
double xl,yl,x2,y2;
int btn,pl,p2,p;
rnessage(450,28,630,46,LIGHTRED,8,BLACK,msg[2
;
mouse−on O ; do {
get−rnouse−position(&x,&y)i if(rnouse−right−buttonO==CLICK){
flag・R了
line(xl+DX,yl+DY,x2+DX,y2+DY)
line(xl+DX,yl+DY,x3+DX,y3+DY)
line(x2+DX,y2+DY,x3+DX,y3+DY)
setviewport(O,O,639,399,1);
setwritemode(O)i
一 193 一
資料 プログラムソース sankaku. c
clrscrO;
goto exitl }
}while((x==oldx) && (y==oldy) && rnou
se left_buttonO!;CL工CK );
posttion(x,y);
if(xl=一x2) {
if(x〈x1) t=M PI/2;
else t=一M PI/2;
} else{
m=(y2−yl)f(x2−xl)i
lf (y>(rn*(x−xl)+yl)) t=M.PII 2;
else t=一M PI/2;
}
rotation((x1+x2)/2,(y1+y2)/2,x2,y2,t,&x3,
&y3);
setwritemode(1);
setcolor(GREEN);
line(xl+DX,yl+DY,oldx3+DX,oldy3+DY);
line(x2+DX,y2+DY,oldx3+DX,oldy3+DY);
line(xl+DX,yl+DY,x3+DX,y3+DY);
line(x2+DX,y2+DY,x3+DX,y3+DY);
oldx3=x3;oldy3=y3;
01dx=x;01dy=y;
}while(rnouse−left−buttonO!=CLICK);
setwriternode (O) ; setcolor(BLACK);
line(xl+DX,yl+DY,x3+DX,y3+DY);
line(x2+DX,y2+DY,x3+DX,y3+DY);
line(xl+DX,yl+DY,x2+DX,y2+DY);
pset(x3,y3,BLACK);
save−cp(x3,y3);
setviewport(O,O,639,399,1);
tri−info(pl,p2,cp−num−1,CHOKKAKUNITOUHEN);
job[job−nurn]=CHOKKAKUNITOUHEN;
rirek i. tou roku (CHOKKAKUNITOUHEN) ; job−num++;
rnouse−onO ;
exit:
return(flag);
}
一 194 一
資料 プログラムソース sikaku. c
#include geo.h
#include <conio.h>
#include <math.h>
#include <stdlib曾h>
#include <graphics.h>
extern double px[52],py[52];
extern char p−label[100];
extern int job−nurn;
extern int job[50];
extern int ip nurn;
extern int p−num[100];
extern char *point.label[52];
extern char *jQb_cmmd[48ユニ extern char *rnsg[34];
extern int cp−num;
extern struct ver hen[100];
extern struct ang kaku[100];
extern int h.num;
extern int k nurn;
/***********************************************
*/
/* 四角形の作図メニュー一一
*/
/ ********************************si**************
*/
void quad−rnenuO
{
int n;
message(450,28,630,46,LIGHTRED,8,BLACK, どん な四角形ですか? );
message(450,52,630,70,LIGHTRED,8,BLACK, (右 ボタン→前のメニュー) );
n=menu(QUAD,2,26);
clrscrOi switch(n){
case O:draw rnenuO; break;
case 1:sikakuO; break;
case 2:seihoukeiOl break;
case 3:chouhoukeiO; break;
case 4:heikousihenkei O ;break;
case 5:hisigataO; break;
}
}
f***********************************************
/・
/* 任意の四角形の作図 *
/
f***********************************************
/
void sikakuO
{
double x,y;
double xl,yl,x2,y2,x3,y3,x4,y4;
doubte 01dx2,01dy2,01dx3,0t・dy3,0tdx4,01dy4;
char a,b,c,d;
rnessage(450,28,630,46,LIGHTRED,8,BLACK,msg[2
4]);
piO;
rnouse−window(4,28,438,394);
mouse−cross−csr(200,150);
/*1点目の取得*/
pl−loop:
message(450,52,630,70,LIGHTRED,8,BLACK,rnsg[6])
;
mouse onO;
do{
getrnouseTposition(&x,&y);
xl=x;yl=y;
exi士:
position(x1,y1);
if(mouse−right−buttonO==CLICK) goto
}while(mouseLleft−buttonO!=CLICK);
mouse−offO;
setwritemode(O) ; pset(xl,yl,BLACK);
save−cp(xl,yl);
piOl
/*2点目の取得*/
p2−100p:
01dx2=x1;01dy2=y 1;
message(450,52,630,7e,LIGHTRED,8,BLACK,msg[7])
;
a=*pointLlabel[cpunurn−1];b=*point−label[cp.n
urn];
ge texy (59,9) ;cprintf ( %cYgc= ,a ,b) ; do{
do{
get−rnouse−position(&x,&y);
x2=xly2=y;
position(x2,y2);
gotoxy(62,9);cprintf( %5.lf ,distanc e(xl,yl,x2,y2));
if(mouse−right−buttonO=±CLICK){
rnouse offO ; cp−nurn一一;
setwriternode(1) l setcolor(GREEN);
Iin e(x1,y1,01dx2,01dy2)l setwritemode(O);
pset(xl,yl,WHITE);
setcolor(WHITE);
outtextxy(xl,yl,point−label
[cp−nurn]) l
gotoxy(59,9);dellineO;
piO;
setTmouse−position(xl,yl);
.rnouse−on O ; goto pl−loop;
}
}while(((x2−oldx2)==O && (y2−oldy2)==O)
&& mouse71eft−buttonO!=CLICK);
setcolor(GREEN);
setwriternode(1);
1ine(xl,yl,x2,y2);
Iine(x1,y1,01dx2,01dy2)l oldx2=x2;oldy2=y2;
}while(rnouse left.buttonO!=CLICK);
setwriternode(1);
setcolor(WHITE);
Iine(xl,yl,x2,y2);
setwritemode(O);
pset(x2,y2,BLACK);
save−cp(x2,y2);
piOi
/*3曲目の取得*!
p3−100p:
01dx3=x2;oldy3=y21
message(450,52,630,70,LIGHTRED,8,BLACK,rnsg[8])
.;
c=*pointTlabel[cpnnurn];
gotoxy(59,10);cprintf( %c%c= ,b,c);
gotoxy(59,14);cprintf( Z%c%c%c= ,a,b,c);
do{
do{
get−rnouse−pos.i tion(&x,&y)i x3=x;y3=y;
gotoxy(62,10);cprintf( %5.lf .distan ce(x2,y2,x3,y3));
gotoxy(65,14);cprintf( %5.lf ,angle
(xl,yl,x2,y2,x3,y3));