Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//аЁб㥬 3D - «ЁЁо
#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <graphics.h>
#include <math.h>
#include <BIOS.h>
#include <DOS.h>
union inkey //§¤Ґбм еа Ёвбп Ёд®а¬ жЁп ® ¦ в®© Є« ўЁиҐ
{ //ch[0] -¬« ¤иЁ© Ў ©в, ch[1] -бв аиЁ© Ў ©в
char ch[2]; //ch[1] -Є®¤ бЄ Ёа®ў Ёп Є« ўЁиЁ
int i; //ch[0] -ASCII Є®¤
} c; //i -®ЎкҐ¤ЁҐЁҐ ¤ўге Ў ©в ў б«®ў®
double Px[4], Py[4], Pz[4];
//дгЄжЁп ўлЎа ®© Ї®ўҐае®бвЁ
//double functionZ(double x,double y)
//{
// return 0.5-exp(-4*(x*x+y*y));
//}
double fi,teta,sf,cf,st,ct;
//ЇҐаҐе®¤ ў ўЁ¤®ўго бЁб⥬㠪®®а¤Ё в Ё ®ав®Ја дЁзҐбЄ®Ґ Їа®ҐЄвЁа®ў ЁҐ
double Xe(double x,double y)
{
return -sf*x+cf*y;
}
//ЇҐаҐе®¤ ў ўЁ¤®ўго бЁб⥬㠪®®а¤Ё в Ё ®ав®Ја дЁзҐбЄ®Ґ Їа®ҐЄвЁа®ў ЁҐ
double Ye(double x,double y,double z)
{
return -ct*cf*x-ct*sf*y+st*z;
}
//ЇҐаҐў®¤ ўЁ¤®ўле Є®®а¤Ё в ў Є®®а¤Ё вл ЇЁЄбҐ«Ґ©
//Ј«®Ў «млҐ ЇҐаҐ¬ҐлҐ
double xe1, xe2, ye1, ye2;
int ne1, ne2, me1, me2;
//ЇҐаҐе®¤ ®в x Є ЇЁЄбҐ«о n
inline int xn(double x)
{
return (int)((x - xe1)/(xe2 - xe1)*(ne2 - ne1)) + ne1;
}
//ЇҐаҐе®¤ ®в y Є ЇЁЄбҐ«о m
inline int ym(double y)
{
return (int)((y - ye1)/(ye2 - ye1)*(me2 - me1)) + me1;
}
void main()
{
Px[0] = 0.5; Py[0] = 0; Pz[0] = 0;
Px[1] = 0; Py[1] = 0.5; Pz[1] = 0.2;
Px[2] = -0.5; Py[2] = 0; Pz[2] = 0.4;
Px[3] = 0; Py[3] = -0.5; Pz[3] = 0.6;
//ђ §¬Ґал ўЁ¤®ў®Ј® ®Є (дЁ§ЁзҐбЄЁҐ Є®®а¤Ё вл)
//Ё а §¬Ґал ®Є нЄа Ґ (ЇЁЄбҐ«Ё)
xe1 = -2; xe2 = 2; ye1 = -2; ye2 = 2;
ne1 = 150; ne2 = 450; me1 = 350; me2 = 50;
//¬ ЄбЁ¬ «млҐ ¤«Ёл ®бҐ© -¬Ёа®ўлҐ Є®®а¤Ё вл
double xmax=1.2, ymax=1.2, zmax=1.2;
int driver=DETECT;
int mode;
int res;
initgraph(&driver,&mode,"c:\\borlandc\\bgi");
if((res=graphresult())!=grOk)
{
printf("\nGraphics error: %s",grapherrormsg(res));
exit(1);
}
double fi1, fi2, rad;
//Є®®а¤Ё вл Їа®ҐЄвЁа㥬®© в®зЄЁ
double xe, ye;
//Є®®а¤Ё вл ЇЁЄбҐ«®ў
int x1,y1,x2,y2;
fi=30, teta=60; // з «м®Ґ Ї®«®¦ҐЁҐ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё в
lbl_1:
cleardevice();
moveto(ne1,me1);
lineto(ne2,me1);
lineto(ne2,me2);
lineto(ne1,me2);
lineto(ne1,me1);
char ss[20];
sprintf(ss,"fi= %4.0lf",fi);
outtextxy(550,50,ss);
sprintf(ss,"teta= %4.0lf",teta);
outtextxy(550,70,ss);
//ўлзЁб«ҐЁҐ бЁгб®ў Ё Є®бЁгб®ў ®аЁҐвЁа®ўЄЁ ўЁ¤®ў®© бЁбвҐ¬л Є®®а¤Ё в
sf=sin(M_PI*fi/180);
cf=cos(M_PI*fi/180);
st=sin(M_PI*teta/180);
ct=cos(M_PI*teta/180);
setcolor(3);
//®бм Ox
xe=Xe(0,0);
ye=Ye(0,0,0);
x1=xn(xe);
y1=ym(ye);
xe=Xe(xmax,0);
ye=Ye(xmax,0,0);
x2=xn(xe);
y2=ym(ye);
line(x1,y1,x2,y2);
outtextxy(x2,y2," X");
//®бм Oy
xe=Xe(0,0);
ye=Ye(0,0,0);
x1=xn(xe);
y1=ym(ye);
xe=Xe(0,ymax);
ye=Ye(0,ymax,0);
x2=xn(xe);
y2=ym(ye);
line(x1,y1,x2,y2);
outtextxy(x2,y2," Y");
//®бм Oz
xe=Xe(0,0);
ye=Ye(0,0,0);
x1=xn(xe);
y1=ym(ye);
xe=Xe(0,0);
ye=Ye(0,0,zmax);
x2=xn(xe);
y2=ym(ye);
line(x1,y1,x2,y2);
outtextxy(x2,y2," Z");
setcolor(15);
xe = Xe(Px[0],Py[0]);
ye = Ye(Px[0],Py[0],Pz[0]);
x1=xn(xe);
y1=ym(ye);
for(int k=1; k<4; k++)
{
xe = Xe(Px[k],Py[k]);
ye = Ye(Px[k],Py[k],Pz[k]);
x2 = xn(xe);
y2 = ym(ye);
line(x1,y1,x2,y2);
x1 = x2; y1 = y2;
}
while(!bioskey(1)); //Їа®ўҐапҐв Ґбвм «Ё бЁ¬ў®« ў ЎгдҐаҐ ўў®¤
//дгЄжЁп Ґ ®бв® ў«Ёў Ґв Їа®Ја ¬¬г
c.i=bioskey(0); //ў®§ўа й Ґв Є®¤ ¦ в®© Є« ўЁиЁ (ЇаҐалў ЁҐ 0x14)
//Ё § ЇЁблў Ґв ў ®ЎкҐ¤ЁҐҐ б
//Ґб«Ё ЎгдҐа Їгбв, в® Їа®Ја ¬¬ ®бв ў«Ёў Ґвбп
if(c.ch[0]==0 && c.ch[1]==72) {teta += 5; goto lbl_1; }
if(c.ch[0]==0 && c.ch[1]==80) {teta -= 5; goto lbl_1; }
if(c.ch[0]==0 && c.ch[1]==75) {fi += 5; goto lbl_1; }
if(c.ch[0]==0 && c.ch[1]==77) {fi -= 5; goto lbl_1; }
closegraph();
}