xr=(int)((x1-xm)*cos(a)-(y1-ym)*sin(a)+xm);
yr=(int)((x1-xm)*sin(a)+(y1-ym)*cos(a)+ym);
x1=xr;y1=yr;
xr=(int)((x2-xm)*cos(a)-(y2-ym)*sin(a)+xm);
yr=(int)((x2-xm)*sin(a)+(y2-ym)*cos(a)+ym);
x2=xr;y2=yr;
xr=(int)((x3-xm)*cos(a)-(y3-ym)*sin(a)+xm);
yr=(int)((x3-xm)*sin(a)+(y3-ym)*cos(a)+ym);
x3=xr;y3=yr;
Show();}
if((e==18432)||(e==19712)){
Hide();
xr=(int)((x1-xm)*cos(-a)-(y1-ym)*sin(-a)+xm);
yr=(int)((x1-xm)*sin(-a)+(y1-ym)*cos(-a)+ym);
x1=xr;y1=yr;
xr=(int)((x2-xm)*cos(-a)-(y2-ym)*sin(-a)+xm);
yr=(int)((x2-xm)*sin(-a)+(y2-ym)*cos(-a)+ym);
x2=xr;y2=yr;
xr=(int)((x3-xm)*cos(-a)-(y3-ym)*sin(-a)+xm);
yr=(int)((x3-xm)*sin(-a)+(y3-ym)*cos(-a)+ym);
x3=xr;y3=yr;
Show();}
}while(e!=283);
};
void Triang::ChangeColor()
{
int www;
do{
color++;
if(color==9)color+=1;
if(color==16)color=1;
Show();}while(bioskey(0)!=283);
};
void Triang::MoveF(){
int xx,yy,q;
do{
q=bioskey(0);
if ((q==18432)&&(ym>10)) {yy=ym-10;MoveTo(xm,yy);}
if ((q==20480)&&(ym<440)) {yy=ym+10;MoveTo(xm,yy);}
if ((q==19712)&&(xm<630)) {xx=xm+10;MoveTo(xx,ym);}
if ((q==19200)&&(xm>10)) {xx=xm-10;MoveTo(xx,ym);}
}while(q!=283);
};
void Triang::MoveT(){
int s,www,yy,xx;
q:s=bioskey(0);
if (s==561) goto t1;
if (s==818) goto t2;
if (s==1075) goto t3;
if (s==283) goto ccc; else goto q;
t1: s=bioskey(0);
if ((s==18432)) {yy=y1-10;MoveTo1(x1,yy);}
if ((s==20480)) {yy=y1+10;MoveTo1(x1,yy);}
if ((s==19712)) {xx=x1+10;MoveTo1(xx,y1);}
if ((s==19200)) {xx=x1-10;MoveTo1(xx,y1);}
if (s==283) goto q;
goto t1;
t2: s=bioskey(0);
if ((s==18432)) {yy=y2-10;MoveTo2(x2,yy);}
if ((s==20480)) {yy=y2+10;MoveTo2(x2,yy);}
if ((s==19712)) {xx=x2+10;MoveTo2(xx,y2);}
if ((s==19200)) {xx=x2-10;MoveTo2(xx,y2);}
if (s==283) goto q;
goto t2;
t3: s=bioskey(0);
if ((s==18432)) {yy=y3-10;MoveTo3(x3,yy);}
if ((s==20480)) {yy=y3+10;MoveTo3(x3,yy);}
if ((s==19712)) {xx=x3+10;MoveTo3(xx,y3);}
if ((s==19200)) {xx=x3-10;MoveTo3(xx,y3);}
if (s==283) goto q;
goto t3;
ccc:;
}
/////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
void Init()
{
int gdriver = DETECT, gmode, errorcode;
initgraph(&gdriver, &gmode, "E:\\borlandc\\bgi");
errorcode = graphresult();
if (errorcode != grOk)
{
printf("Graphics error: %s\n", grapherrormsg(errorcode));
printf("Press any key to halt:");
getch();
exit(1);
}
};
void skin(){
setbkcolor(LIGHTBLUE);
setcolor(8);
rectangle(10,10,getmaxx()-10,getmaxy()-40);
rectangle(0,0,getmaxx(),getmaxy());
setfillstyle(SOLID_FILL,7);
floodfill(3,3,8);
setcolor(4);
outtextxy(100,2,"Управление производится клавишами курсора");
outtextxy(10,getmaxy()-35,"Перемещение фигуры - F1");
outtextxy(10,getmaxy()-15,"Вращение фигуры - F2");
outtextxy(250,getmaxy()-35,"Перемещение вершин - F3");
outtextxy(470,getmaxy()-35,"Выбор цвета - F4");
outtextxy(470,getmaxy()-15,"Выход - Esc");
setcolor(4);
circle(260,getmaxy()-15,1);
outtextxy(260,getmaxy()-18," - 1");
setcolor(13);
circle(320,getmaxy()-15,1);
outtextxy(320,getmaxy()-18," - 2");
setcolor(1);
circle(380,getmaxy()-15,1);
outtextxy(380,getmaxy()-18," - 3");
setviewport(11,11,629,439,1);
};
void main()
{Init();
skin();
Triang tr(200,200,300,200,200,300,15);
tr.Show();
s:switch (bioskey(0)) {
case 15104 : {tr.MoveF(); break;} //f1
case 15360 : {tr.RotateTo(0.5);break;} //f2
case 15616 : {tr.MoveT(); break;} //f3
case 15872 : {tr.ChangeColor();break;}
case 283 : {closegraph();exit(-1);}
default : goto s;};
goto s;
}
5. Математическая модель.
В этом пункте стоит упомянуть лишь вращение точки (x,y) вокруг точки с координатами (a,b) на угол j.
x`=(x-a)*cos(j)-(y-b)*sin(j)+a
y`=(x-a)*sin(j)+(y-b)*cos(j)+b
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.