Добавил:
korayakov
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:
//Z ЎгдҐа ў ЁбЇ®«ҐЁЁ Ѓ аЄ®ў . Њ®¦® б¤ вм в®«мЄ® Ѓ «Ё®ўЁзг
#include<conio.h>
#include<iostream.h>
#include<string.h>
#include<graphics.h>
#include<dos.h>
#include<math.h>
//#define d 2
struct point {float x,y,z,a,b,c,d;} p[6][4];
void PLOSK(int i)
{
p[i][0].a=(p[i][1].y-p[i][0].y)*(p[i][2].z-p[i][0].z)-(p[i][2].y-p[i][0].y)*(p[i][1].z-p[i][0].z);
p[i][0].b=(p[i][1].z-p[i][0].z)*(p[i][2].x-p[i][0].x)-(p[i][2].z-p[i][0].z)*(p[i][1].x-p[i][0].x);
p[i][0].c=(p[i][1].x-p[i][0].x)*(p[i][2].y-p[i][0].y)-(p[i][2].x-p[i][0].x)*(p[i][1].y-p[i][0].y);
p[i][0].d=-((p[i][0].a)*(p[i][0].x)+(p[i][0].b)*(p[i][0].y)+(p[i][0].c)*(p[i][0].z));
}
void POVOROT(float fi, float teta, float ro)
{
float x,y,z;
for (int i=0; i<6; i++)
{
for(int j=0;j<4;j++)
{
x=p[i][j].x; y=p[i][j].y; z=p[i][j].z;
p[i][j].x=(x)*(-sin(fi))+(y)*(cos(fi));
p[i][j].y=(x)*(-cos(teta))*(cos(fi))+(y)*(-cos(teta))*(sin(fi))+(z)*(sin(teta));
p[i][j].z=(x)*(-sin(teta))*(cos(fi))+(y)*(-sin(teta))*(sin(fi))+(z)*(-cos(teta))+ro;
}
PLOSK(i);
}
}
double Z(int i,float x,float y)
{
return ((-(p[i][0].d+(p[i][0].a)*x+(p[i][0].b)*y))/p[i][0].c);
}
int PROVERKA(int i,float x,float y)
{
int priz;
float k,c;
for(int j=0;j<4;j++)
{
if (j!=3)
c=(p[i][j+1].x-p[i][j].x)*(y-p[i][j].y)-(x-p[i][j].x)*(p[i][j+1].y-p[i][j].y);
else
c=(p[i][0].x-p[i][j].x)*(y-p[i][j].y)-(x-p[i][j].x)*(p[i][0].y-p[i][j].y);
if(j==0)
{
k=c-fabs(c);
if (k>=0)
priz=1;
else
priz=0;
}
else
{
k=c-fabs(c);
if (!(((k>=0)&&(priz==1))||((k<0)&&(priz==0)))) return 0;
}
}
return 1;
}
void main(void)
{
while(1)
{
p[0][0].x=2; p[0][0].y=0; p[0][0].z=0;
p[0][1].x=2; p[0][1].y=1; p[0][1].z=0;
p[0][2].x=2; p[0][2].y=1; p[0][2].z=1;
p[0][3].x=2; p[0][3].y=0; p[0][3].z=1;
p[1][0].x=2; p[1][0].y=1; p[1][0].z=0;
p[1][1].x=0; p[1][1].y=1; p[1][1].z=0;
p[1][2].x=0; p[1][2].y=1; p[1][2].z=1;
p[1][3].x=2; p[1][3].y=1; p[1][3].z=1;
p[2][0].x=0; p[2][0].y=1; p[2][0].z=0;
p[2][1].x=0; p[2][1].y=1; p[2][1].z=1;
p[2][2].x=0; p[2][2].y=0; p[2][2].z=1;
p[2][3].x=0; p[2][3].y=0; p[2][3].z=0;
p[3][0].x=2; p[3][0].y=1; p[3][0].z=1;
p[3][1].x=0; p[3][1].y=1; p[3][1].z=1;
p[3][2].x=0; p[3][2].y=0; p[3][2].z=1;
p[3][3].x=2; p[3][3].y=0; p[3][3].z=1;
p[4][0].x=2; p[4][0].y=0; p[4][0].z=0;
p[4][1].x=0; p[4][1].y=0; p[4][1].z=0;
p[4][2].x=0; p[4][2].y=0; p[4][2].z=1;
p[4][3].x=2; p[4][3].y=0; p[4][3].z=1;
p[5][0].x=2; p[5][0].y=0; p[5][0].z=0;
p[5][1].x=2; p[5][1].y=1; p[5][1].z=0;
p[5][2].x=0; p[5][2].y=1; p[5][2].z=0;
p[5][3].x=0; p[5][3].y=0; p[5][3].z=0;
clrscr();
int f,t;
float ff,tt;
char ch;
cout<<"‚ўҐ¤ЁвҐ гЈ®« ”€: "; cin>>f;
cout<<"BўҐ¤ЁвҐ гЈ®« ’Ґвв : "; cin>>t;
ff=M_PI*f/180;
tt=M_PI*t/180;
POVOROT(ff,tt,5);
int driver=VGA;
int mode=VGAHI;
initgraph(&driver,&mode,"c:\\BC\\BGI");
cleardevice();
float xwmax=3, xwmin=-3, ywmax=3, ywmin=-3,
xvmax=0.8, xvmin=0.2, yvmax=0.8, yvmin=0.2;
float u,v,xv,yv;
double z=1000,cvet=0;
for (u=xwmin;u<=xwmax;u+=0.01)
{
for (v=ywmin;v<=ywmax;v+=0.01)
{
z=1000; cvet=0;
for(int i=0; i<6;i++)
{
if (p[i][0].c!=0)
if (PROVERKA(i,u,v)==1)
if (Z(i,u,v)<z)
{
z=Z(i,u,v);
cvet=i+1;
// getch();
}
}
xv=(xvmin+(((xvmax-xvmin)/(xwmax-xwmin))*(u-xwmin)))*640;
yv=(yvmin+(((yvmax-yvmin)/(ywmax-ywmin))*(v-ywmin)))*480;
// cvet=4;
putpixel(xv,yv,cvet);
// getch();
}
}
getch();
closegraph();
clrscr();
cout<<"…йҐ - Є« ўЁи ; ‚л室 - Spase.";
ch=getch();
if (ch==32) break;
}
}