Добавил:
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 Bspl(int i, double t) //зҐвлॠдгЄжЁЁ ЃҐ§мҐ (ЃҐаи⥩ )
{
double b;
double t2 = t*t, t3 = t2*t;
switch(i)
{
case 0: b = (1 - 3*t + 3*t2 - t3)/6; break;
case 1: b = (4 - 6*t2 + 3*t3)/6; break;
case 2: b = (1 + 3*t + 3*t2 - 3*t3)/6; break;
case 3: b = t3/6; break;
// case 0 : b=(1-t)*(1-t)*(1-t); break;
// case 1 : b=3*t*(1-t)*(1-t); break;
// case 2 : b=3*t*t*(1-t); break;
// case 3 : b=t*t*t; break;
default : printf("\nError in function Bezie"); exit(1);
}
return b;
}
double splineX(double t)
{
double S=0;
for(int i=0; i<4; i++)
S += Px[i]*Bspl(i,t);
return S;
}
double splineY(double t)
{
double S=0;
for(int i=0; i<4; i++)
S += Py[i]*Bspl(i,t);
return S;
}
double splineZ(double t)
{
double S=0;
for(int i=0; i<4; i++)
S += Pz[i]*Bspl(i,t);
return S;
}
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.6; Py[0] = 0; Pz[0] = 0;
Px[1] = 0; Py[1] = 0.6; Pz[1] = 0.5;
Px[2] = -0.6; Py[2] = 0; Pz[2] = 0.3;
Px[3] = 0; Py[3] = -0.6; Pz[3] = 0.9;
// Px[0] = 0.5*(Px[1]+Px[2]); Py[0] = 0.5*(Py[1]+Py[2]); Pz[0] = 0.5*(Pz[1]+Pz[2]);
//ђ §¬Ґал ўЁ¤®ў®Ј® ®Є (дЁ§ЁзҐбЄЁҐ Є®®а¤Ё вл)
//Ё а §¬Ґал ®Є нЄа Ґ (ЇЁЄбҐ«Ё)
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;
}
int J=40;
double xt, yt, zt, t, dt = 1.0/J;
for(int j=0; j<J; j++)
{
t = dt*j;
xt = splineX(t);
yt = splineY(t);
zt = splineZ(t);
xe = Xe(xt,yt);
ye = Ye(xt,yt,zt);
x1 = xn(xe);
y1 = ym(ye);
putpixel(x1,y1,14);
}
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();
}
Соседние файлы в папке LAB7